Yanıtlar:
xargs
ne istersen yapacak:
git ls-files | xargs cat | wc -l
Ancak daha fazla bilgi ve muhtemelen daha iyisi ile şunları yapabilirsiniz:
git ls-files | xargs wc -l
grep cpp |
önce orada xargs
, sonra.
git ls-files -z | xargs -0 wc -l
boşluk bulunan dosyalarınız varsa kullanın .
git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -l
grep parçası istediğiniz herhangi bir perl regex!
git ls-files | grep "\.java$" | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Bu, boş ağaç ile şu anki çalışma ağacınız arasındaki farkları gösterir. Bu, mevcut çalışma ağacınızdaki tüm satırları sayar.
Geçerli çalışma ağacınızdaki sayıları almak için şunu yapın:
git diff --shortstat `git hash-object -t tree /dev/null`
Size bir dize verecektir 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`
son satırı almak için kullanın , kuyruk gerekmez.
Projenin kapsamı hakkında bir fikir edinmek istediğiniz için bu sayımı istiyorsanız , önemli ve önemsiz kod satırlarının dile göre dökümünü veren CLOC (“Kod Satırlarını Say”) çıktısını tercih edebilirsiniz .
cloc $(git ls-files)
(Bu çizgi eşdeğerdir git ls-files | xargs cloc
. Bu kullanır sh
sitesindeki $()
komut ikamesi özelliği).
Örnek çıktı:
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
-------------------------------------------------------------------------------
Önce CLOC kurmanız gerekecek. Muhtemelen olabilir yüklemek cloc
paket yöneticinizle - örneğin brew install cloc
ile Homebrew .
cloc $(git ls-files)
genellikle üzerinde bir gelişme cloc .
. Örneğin, yukarıdaki örnek çıktı git ls-files
471 satır kod raporlar. Aynı proje için, cloc .
455.279 satırlık bir rapor (ve çalıştırılması altı dakika sürer), çünkü Git yok sayılan node_modules
klasördeki bağımlılıkları arar .
cloc --vcs git
Kötü adlandırılmış dosyalara (veya çok çoğuna) sahip bazı kenar durumlardan kaçınan bu günleri kullanabilirsiniz .
git ls-files | xargs wc -l
Satır sayıları birden çok total
satıra yığınlanacak çok sayıda dosyayla uğraşırken toplu işlem sorunları ile karşılaştım .
Sorudan bahşiş alma wc yardımcı programı neden "total" ile birden fazla satır oluşturur? , Sorunu atlamak için aşağıdaki komutu buldum:
wc -l $(git ls-files)
Veya yalnızca bazı dosyaları, örneğin kodu incelemek istiyorsanız:
wc -l $(git ls-files | grep '.*\.cs')
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z)
. <(COMMAND)
Sözdizimi içerikleri sonucudur dosyanın adını döndürür COMMAND
.
Bana göre en iyi çözüm @ ephemient'in cevabının yorumlarına gömüldü. Fark edilmeden gitmesi için buraya çekiyorum. Bunun için kredi @FRoZeN (ve @ephemient) adresine gitmelidir.
git diff --shortstat `git hash-object -t tree /dev/null`
ek parazit olmadan bir repo'nun çalışma dizinindeki dosya ve satırların toplamını döndürür. Bir bonus olarak, sadece kaynak kodu sayılır - ikili dosyalar hesaptan çıkarılır.
Yukarıdaki komut Linux ve OS X üzerinde çalışır.
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Bu Windows üzerinde de çalışır.
Kayıt için boş satırları hariç tutma seçenekleri,
-w
/ --ignore-all-space
,-b
/ --ignore-space-change
,--ignore-blank-lines
, --ignore-space-at-eol
ile kullanıldığında herhangi bir etkisi yoktur --shortstat
. Boş satırlar sayılır.
git mktree </dev/null
veya true|git mktree
veya git mktree <&-
veya :|git mktree
aramızdaki tuş vuruş sayaçları için :-) - depo etrafında yüzen boş bir ağaç hiçbir şeye zarar vermez.
Bu, cloc 1.68'den itibaren çalışır :
cloc --vcs=git
--vcs
benim için çalışmadı, belki kaldırıldı. cloc .
git repo sırasında, OTOH çalıştı.
Cmder ile oynuyordum ( http://gooseberrycreative.com/cmder/ ) ve html, css, java ve javascript satırlarını saymak istedim. Yukarıdaki cevaplardan bazıları işe or
yarasa da, grep'teki desen işe yaramadı - burada bulduğumu ( /unix/37313/how-do-i-grep-for-multiple-patterns ) buldum ondan kaçmak için
Şimdi kullandığım şey bu:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
Aşağıdakileri kullanıyorum:
git grep ^ | wc -l
Bu, git tarafından sürümlendirilen tüm dosyaları ^
bir satırın başlangıcını temsil eden normal ifade için arar , bu nedenle bu komut toplam satır sayısını verir!
Bunu ben yaptım:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
depodaki tüm metin dosyalarını ilgilenilen dosyalar olarak sayarsanız bu çalışır. Bazıları belge vb. Olarak değerlendirilirse, bir hariç tutma filtresi eklenebilir.
Https://github.com/flosse/sloc adresindeki bu araç çıktıyı daha açıklayıcı bir şekilde verebilir. Kaynak kodunuzun istatistiklerini oluşturur:
: | git mktree | git diff --shortstat --stdin
Veya:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
İkili dosyaları dahil etmek isteyip istemediğinize bağlı olarak, iki çözüm vardır.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
"xargs -P 4" dört paralel işlem kullanarak dosyaları okuyabileceği anlamına gelir. Çok büyük depoları tarıyorsanız bu gerçekten yardımcı olabilir. Makinenin kapasitesine bağlı olarak işlem sayısını artırabilirsiniz.
-a, ikili dosyaları metin olarak işler (İkili Dahil Et)
-l '', eşleşen satırlar yerine yalnızca dosya adlarını gösterir (Yalnızca boş olmayan dosyaları tara)
-I, ikili dosyalardaki desenlerle eşleşmez (İkili Hariç Tut) -
önbelleğe alınmış, çalışma ağacı yerine dizinde arama (Taranmamış dosyaları dahil et)