Bagaimana cara saya menghitung jumlah total baris yang ada di semua file dalam repositori git?
git ls-files
memberi saya daftar file yang dilacak oleh git.
Saya mencari perintah untuk cat
semua file itu. Sesuatu seperti
git ls-files | [cat all these files] | wc -l
bash
git
shell
line-count
Dogbert
sumber
sumber
grep cpp |
di sana sebelumxargs
, lalu.git ls-files -z | xargs -0 wc -l
jika Anda memiliki file dengan spasi di namanya.git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -l
mana bagian grep adalah setiap perl regex yang Anda inginkan!git ls-files | grep "\.java$" | xargs wc -l
Ini menunjukkan perbedaan dari pohon kosong ke pohon Anda saat ini. Yang terjadi menghitung semua baris di pohon kerja Anda saat ini.
Untuk mendapatkan angka di pohon kerja Anda saat ini, lakukan ini:
Ini akan memberi Anda string seperti
1770 files changed, 166776 insertions(+)
.sumber
git hash-object -t tree /dev/null
.git diff --stat `git hash-object -t tree /dev/null`
git diff --stat `git hash-object -t tree /dev/null` | tail -1
git diff --shortstat `git hash-object -t tree /dev/null`
untuk mendapatkan baris terakhir, ekor tidak diperlukan.Jika Anda ingin penghitungan ini karena Anda ingin mendapatkan gambaran tentang cakupan proyek, Anda dapat memilih output CLOC ("Count Lines of Code"), yang memberi Anda uraian garis-garis kode dengan bahasa yang signifikan dan tidak signifikan.
(Baris ini setara dengan
git ls-files | xargs cloc
. Ia menggunakansh
's$()
substitusi perintah fitur.)Output sampel:
Anda harus menginstal CLOC terlebih dahulu. Anda mungkin dapat menginstal
cloc
dengan manajer paket Anda - misalnya,brew install cloc
dengan Homebrew .cloc $(git ls-files)
seringkali merupakan perbaikan atascloc .
. Misalnya, contoh output di atas dengangit ls-files
laporan 471 baris kode. Untuk proyek yang sama,cloc .
melaporkan 456.279 baris kekalahan (dan membutuhkan waktu enam menit untuk menjalankan), karena mencari dependensi dalamnode_modules
folder yang diabaikan Git .sumber
cloc --vcs git
hari-hari ini, yang menghindari beberapa kasus tepi dengan file dengan nama buruk (atau terlalu banyak).Saya mengalami masalah batching
git ls-files | xargs wc -l
ketika berhadapan dengan sejumlah besar file, di mana jumlah baris akan terpotong menjadi beberapatotal
baris.Mengambil tip dari pertanyaan. Mengapa utilitas wc menghasilkan beberapa baris dengan "total"? , Saya telah menemukan perintah berikut untuk mem-bypass masalah:
wc -l $(git ls-files)
Atau jika Anda hanya ingin memeriksa beberapa file, misalnya kode:
wc -l $(git ls-files | grep '.*\.cs')
sumber
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z)
. The<(COMMAND)
sintaks mengembalikan nama file yang isinya adalah hasil dariCOMMAND
.Solusi terbaik, bagi saya, terkubur dalam komentar jawaban @ ephemient. Saya hanya menariknya di sini sehingga tidak luput dari perhatian. Kredit untuk ini harus masuk ke @FRoZeN (dan @ephemient).
mengembalikan total file dan baris dalam direktori kerja repo, tanpa gangguan tambahan. Sebagai bonus, hanya kode sumber yang dihitung - file biner dikecualikan dari penghitungan.
Perintah di atas berfungsi di Linux dan OS X. Versi lintas platformnya adalah
Itu bekerja pada Windows juga.
Sebagai catatan, opsi untuk mengecualikan garis kosong,
-w
/--ignore-all-space
,-b
/--ignore-space-change
,--ignore-blank-lines
,--ignore-space-at-eol
tidak memiliki efek apa pun ketika digunakan dengan
--shortstat
. Garis kosong dihitung.sumber
git mktree </dev/null
atautrue|git mktree
ataugit mktree <&-
atau:|git mktree
untuk penghitung-keystroke di antara kita :-) - pohon kosong yang mengambang di sekitar repo tidak akan melukai apa pun.Ini bekerja pada cloc 1.68:
cloc --vcs=git
sumber
--vcs
tidak bekerja untuk saya, mungkin sudah dihapus.cloc .
sementara di git repo berhasil, OTOH.Saya bermain-main dengan cmder ( http://gooseberrycreative.com/cmder/ ) dan saya ingin menghitung garis html, css, java dan javascript. Sementara beberapa jawaban di atas bekerja,
or
pola grep tidak - saya temukan di sini ( /unix/37313/how-do-i-grep-for-multiple-patterns ) yang saya miliki untuk menghindarinyaJadi ini yang saya gunakan sekarang:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
sumber
Saya menggunakan yang berikut ini:
Ini mencari semua file versi git untuk regex
^
, yang mewakili awal baris, jadi perintah ini memberikan jumlah total baris!sumber
Saya melakukan ini:
ini berfungsi jika Anda menghitung semua file teks dalam repositori sebagai file yang menarik. Jika beberapa dianggap dokumentasi, dll, filter pengecualian dapat ditambahkan.
sumber
Alat ini di github https://github.com/flosse/sloc dapat memberikan output dengan cara yang lebih deskriptif. Ini akan Membuat statistik kode sumber Anda:
sumber
Mencoba:
pada direktori / direktori yang dimaksud
sumber
Atau:
sumber
Tergantung pada apakah Anda ingin memasukkan file biner atau tidak, ada dua solusi.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
-a, proses file biner sebagai teks (Termasuk Biner)
-l '', hanya tampilkan nama file alih-alih baris yang cocok (Pindai hanya file yang tidak kosong)
-Saya, jangan cocokkan pola dalam file biner (Kecualikan Biner)
--cached, cari di indeks daripada di pohon kerja (Sertakan file yang tidak dikomit)
sumber