Saya ingin mendapatkan jumlah komit dari repositori Git saya, sedikit seperti nomor revisi SVN.
Tujuannya adalah untuk menggunakannya sebagai nomor build yang unik dan bertambah.
Saat ini saya melakukan hal itu, di Unix / Cygwin / msysGit:
git log --pretty=format:'' | wc -l
Tapi saya merasa ini sedikit hack.
Apakah ada cara yang lebih baik untuk melakukan itu? Akan keren jika saya benar-benar tidak membutuhkan wc
atau bahkan Git, sehingga bisa bekerja pada Windows yang telanjang. Cukup baca file atau struktur direktori ...
git
build-process
revision
Splo
sumber
sumber
git rev-list HEAD --count
git rev-listJawaban:
Untuk mendapatkan jumlah komit untuk revisi (
HEAD
,,master
hash komit):Untuk mendapatkan jumlah komit di semua cabang:
Saya sarankan agar tidak menggunakan ini untuk pengidentifikasi bangunan, tetapi jika Anda harus, mungkin yang terbaik adalah menggunakan hitungan untuk cabang yang Anda lawan. Dengan begitu revisi yang sama akan selalu memiliki nomor yang sama. Jika Anda menggunakan hitungan untuk semua cabang, aktivitas di cabang lain dapat mengubah jumlahnya.
sumber
git shortlog | grep -E '^[ ]+\w+' | wc -l
jika Anda ingin mendapatkan jumlah total dangit shortlog | grep -E '^[^ ]'
jika Anda ingin mendapatkan nomor komit untuk setiap kontributor.wc -l
. FTW minimalis. Saya memasukkannya ke dalam jawaban saya.git log --pretty=format:'' | wc -l
pendekatan yang diberikan dalam pertanyaan awal) dan salah: Anda dapat melihat ini dengan membalikkan kecocokan (git shortlog | grep -Ev '^[ ]+\w+'
) dan melihat bahwa mis. Melakukan tanpa pesan (yaitu, "<none>") tidak dihitung. Menggunakangit rev-list HEAD --count
keduanya lebih ringkas dan lebih akurat.git rev-list HEAD --count
adalah solusi yang lebih baik sekarang.git log --oneline | wc -l
git shortlog
adalah satu arah.sumber
git rev-list HEAD --count
daripada pendekatan asli yang diberikan dalam OP. Dalam tes saya,git log --pretty=format:'' | wc -l
dimatikan satu per satu.git log --oneline | wc -l
tidak dimatikan oleh satu (OS X 10.8.5).git rev-list HEAD --count
git rev-list
git rev-list <commit>
: Daftar komit yang dapat dijangkau dengan mengikuti tautan induk dari komit yang diberikan (dalam hal ini, KEPALA ).--count
: Cetak angka yang menyatakan berapa banyak komit yang akan terdaftar, dan tekan semua output lainnya.sumber
Perintah ini mengembalikan jumlah komit yang dikelompokkan berdasarkan komiter:
Keluaran:
Anda mungkin ingin tahu bahwa
-s
argumennya adalah bentuk kontraksi dari--summary
.sumber
git shortlog
dengan sendirinya tidak menjawab pertanyaan awal dari jumlah total komitmen (tidak dikelompokkan berdasarkan penulis). Gunakangit rev-list HEAD --count
sebagai gantinya.| sort -n
jugaJika Anda sedang mencari pengidentifikasi yang unik dan masih cukup mudah dibaca, git menjelaskan mungkin hanya cocok untuk Anda.
sumber
Anda bukan yang pertama berpikir tentang "angka revisi" di Git , tetapi '
wc
cukup berbahaya, karena komit dapat dihapus atau dihancurkan, dan sejarah ditinjau kembali."Angka revisi" sangat penting untuk Subversion karena diperlukan dalam kasus penggabungan (SVN1.5 dan 1.6 telah meningkat di bagian depan itu).
Anda bisa berakhir dengan kait pra-komit yang akan menyertakan nomor revisi dalam komentar, dengan algoritma yang tidak melibatkan mencari semua riwayat cabang untuk menentukan nomor yang benar.
Bazaar sebenarnya datang dengan algoritma seperti itu , dan itu mungkin merupakan titik awal yang baik untuk apa yang ingin Anda lakukan.
(Seperti yang ditunjukkan oleh jawaban Bombe , Git sebenarnya memiliki algoritma sendiri, berdasarkan pada tag terbaru, ditambah jumlah komit, ditambah sedikit kunci SHA-1). Anda harus melihat (dan mendukung) jawabannya jika itu berhasil untuk Anda.
Untuk mengilustrasikan ide Aaron , Anda juga dapat menambahkan hasit komit Git ke dalam file "info" aplikasi yang Anda distribusikan dengan aplikasi Anda.
Dengan begitu, kotak about akan terlihat seperti:
Nomor aplikasi adalah bagian dari komit, tetapi file "info" aplikasi dihasilkan selama proses pengemasan, yang secara efektif menghubungkan nomor pembuatan aplikasi dengan id revisi teknis .
sumber
Anda bisa menggunakan:
Hasil:
sumber
Cara sederhana adalah:
oneline
memastikan itu.sumber
Untuk memasukkannya ke dalam variabel, cara termudah adalah:
sumber
git rev-list
adalah alat yang tepat untuk digunakan, tidakgit log
seperti yang dikatakan orang lain.wc -l
hanya menggunakan--count
switch:git rev-list --all --count
.--count
saklar itu sendiri.Git shortlog adalah salah satu cara untuk mendapatkan detail komit:
Ini akan memberikan jumlah komit diikuti oleh nama penulis. Opsi -s menghapus semua pesan komit untuk setiap komit yang dibuat penulis. Hapus opsi yang sama jika Anda juga ingin melihat pesan komit. Opsi -n digunakan untuk mengurutkan seluruh daftar. Semoga ini membantu.
sumber
git shortlog
dengan sendirinya tidak menjawab pertanyaan awal dari jumlah total komitmen (tidak dikelompokkan berdasarkan penulis). Gunakangit rev-list HEAD --count
sebagai gantinya.git rev-parse --Kepala pendek
sumber
Ada skrip pembantu yang bagus yang digunakan orang-orang Git untuk membantu menghasilkan nomor versi berguna berdasarkan deskripsi Git. Saya menunjukkan script dan menjelaskannya dalam jawaban saya untuk Bagaimana Anda akan memasukkan id komit saat ini dalam file proyek Git? .
sumber
Jika Anda hanya menggunakan satu cabang, seperti master, saya pikir ini akan berhasil:
Ini hanya akan menghasilkan angka. Anda dapat alias ke sesuatu seperti
untuk membuat semuanya benar-benar nyaman. Untuk melakukannya, edit
.git/config
file Anda dan tambahkan ini di:Ini tidak akan berfungsi pada Windows. Saya tidak tahu sama dengan "wc" untuk OS itu, tetapi menulis skrip Python untuk melakukan penghitungan untuk Anda akan menjadi solusi multi-platform.
EDIT : Dapatkan hitung di antara dua komit:
Saya mencari jawaban yang akan menunjukkan cara mendapatkan jumlah komit antara dua revisi sewenang-wenang dan tidak melihat apa pun.
sumber
Buat nomor selama pembuatan dan tulis ke file. Setiap kali Anda membuat rilis, komit file itu dengan komentar "Build 147" (atau apa pun nomor build saat ini). Jangan komit file selama perkembangan normal. Dengan cara ini, Anda dapat dengan mudah memetakan antara angka dan versi build di Git.
sumber
Di perusahaan kami, kami pindah dari SVN ke Git. Kurangnya angka revisi adalah masalah besar!
Lakukan
git svn clone
, lalu beri tag SVN terakhir yang dilakukan oleh nomor revisi SVN-nya:Maka Anda bisa mendapatkan nomor revisi dengan bantuan
Perintah ini memberikan sesuatu seperti:
Berarti: Tag terakhir adalah 7603 - ini adalah revisi SVN. 3 - adalah jumlah komitmen dari itu. Kita perlu menambahkannya.
Jadi, nomor revisi dapat dihitung dengan skrip ini:
sumber
Yang saya gunakan adalah:
Sederhana tapi berhasil.
sumber
Menggunakan sintaks Bash,
kelihatannya bagus untuk sejarah linier murni. Jika Anda juga ingin terkadang memiliki "angka" dari cabang (berdasarkan
master
), pertimbangkan:Saat dijalankan dari checkout
master
, Anda mendapatkan secara sederhana1234.0
atau sejenisnya. Ketika dijalankan dari checkout cabang Anda akan mendapatkan sesuatu seperti1234.13
, jika ada 13 komitmen yang dibuat pada cabang itu. Jelas ini hanya berguna sejauh Anda mendasarkan paling banyak satu cabang darimaster
revisi yang diberikan .--first-parent
dapat ditambahkan ke nomor mikro untuk menekan beberapa komitmen yang timbul hanya dari penggabungan cabang lain, meskipun mungkin tidak perlu.sumber
Anda dapat mencoba
atau untuk membuat daftar semua komitmen yang dilakukan oleh orang-orang yang berkontribusi dalam repositori
sumber
git config --global alias.count 'rev-list --all --count'
Jika Anda menambahkan ini ke konfigurasi Anda, Anda bisa mereferensikan perintah;
git count
sumber
Gunakan git shortlog seperti ini
git shortlog -sn
Atau buat alias (untuk terminal berbasis ZSH)
# show contributors by commits alias gcall="git shortlog -sn"
sumber
Bagaimana kalau membuat
alias
?sumber