Jawaban:
xargs
akan melakukan apa yang Anda inginkan:
git ls-files | xargs cat | wc -l
Tetapi dengan lebih banyak informasi dan mungkin lebih baik, Anda dapat melakukan:
git ls-files | xargs wc -l
grep cpp |
di sana sebelum xargs
, 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
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
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:
git diff --shortstat `git hash-object -t tree /dev/null`
Ini akan memberi Anda string seperti 1770 files changed, 166776 insertions(+)
.
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.
cloc $(git ls-files)
(Baris ini setara dengan git ls-files | xargs cloc
. Ia menggunakan sh
's $()
substitusi perintah fitur.)
Output sampel:
20 text files.
20 unique files.
6 files ignored.
http://cloc.sourceforge.net v 1.62 T=0.22 s (62.5 files/s, 2771.2 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Javascript 2 13 111 309
JSON 3 0 0 58
HTML 2 7 12 50
Handlebars 2 0 0 37
CoffeeScript 4 1 4 12
SASS 1 1 1 5
-------------------------------------------------------------------------------
SUM: 14 22 128 471
-------------------------------------------------------------------------------
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 atas cloc .
. Misalnya, contoh output di atas dengan git 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 dalam node_modules
folder yang diabaikan Git .
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 beberapa total
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')
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 dari COMMAND
.
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).
git diff --shortstat `git hash-object -t tree /dev/null`
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
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
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.
git mktree </dev/null
atau true|git mktree
atau git 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
--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 menghindarinya
Jadi ini yang saya gunakan sekarang:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
Saya menggunakan yang berikut ini:
git grep ^ | wc -l
Ini mencari semua file versi git untuk regex ^
, yang mewakili awal baris, jadi perintah ini memberikan jumlah total baris!
Saya melakukan ini:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
ini berfungsi jika Anda menghitung semua file teks dalam repositori sebagai file yang menarik. Jika beberapa dianggap dokumentasi, dll, filter pengecualian dapat ditambahkan.
Alat ini di github https://github.com/flosse/sloc dapat memberikan output dengan cara yang lebih deskriptif. Ini akan Membuat statistik kode sumber Anda:
: | git mktree | git diff --shortstat --stdin
Atau:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
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
"xargs -P 4" berarti dapat membaca file menggunakan empat proses paralel. Ini bisa sangat membantu jika Anda memindai repositori yang sangat besar. Tergantung pada kapasitas mesin Anda dapat meningkatkan jumlah proses.
-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)