Odpowiedzi:
xargs
zrobi co chcesz:
git ls-files | xargs cat | wc -l
Ale mając więcej informacji i prawdopodobnie lepiej, możesz:
git ls-files | xargs wc -l
grep cpp |
tam xargs
.
git ls-files -z | xargs -0 wc -l
jeśli masz pliki ze spacjami w nazwie.
git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -l
gdzie część grep jest dowolnym wyrażeniem regularnym w Perlu!
git ls-files | grep "\.java$" | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Pokazuje różnice między pustym drzewem a bieżącym drzewem roboczym. Co się dzieje, aby policzyć wszystkie wiersze w bieżącym drzewie roboczym.
Aby uzyskać liczby z bieżącego drzewa roboczego, wykonaj następujące czynności:
git diff --shortstat `git hash-object -t tree /dev/null`
To da ci ciąg jak 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`
aby uzyskać ostatnią linię, ogon nie jest potrzebny.
Jeśli chcesz tę liczbę, ponieważ chcesz poznać zakres projektu, możesz preferować wyjście CLOC („Count Lines of Code”), który daje podział znaczących i nieistotnych linii kodu według języka.
cloc $(git ls-files)
(Ta linia jest równoważna git ls-files | xargs cloc
. Wykorzystuje sh
„S $()
podstawienie polecenia funkcji).
Przykładowe dane wyjściowe:
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
-------------------------------------------------------------------------------
Najpierw musisz zainstalować CLOC. Prawdopodobnie można zainstalować cloc
z menadżera pakietów - na przykład brew install cloc
z Homebrew .
cloc $(git ls-files)
jest często lepszym rozwiązaniem cloc .
. Na przykład powyższy przykładowy wynik z git ls-files
raportami 471 wierszy kodu. W przypadku tego samego projektu cloc .
zgłasza ogromną liczbę 456 279 wierszy (i trwa sześć minut), ponieważ przeszukuje zależności w node_modules
folderze ignorowanym przez Git .
cloc --vcs git
tych dni, co pozwala uniknąć niektórych przypadków krawędzi ze źle nazwanymi plikami (lub zbyt dużą ich liczbą).
Wystąpiły problemy wsadowe git ls-files | xargs wc -l
podczas pracy z dużą liczbą plików, gdzie liczba linii zostanie podzielona na wiele total
linii.
Biorąc wskazówkę z pytania Dlaczego narzędzie wc generuje wiele wierszy z „total”? , Znalazłem następujące polecenie w celu obejścia problemu:
wc -l $(git ls-files)
Lub jeśli chcesz sprawdzić tylko niektóre pliki, np. Kod:
wc -l $(git ls-files | grep '.*\.cs')
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z)
. <(COMMAND)
Składnia zwraca nazwę pliku, którego zawartość jest wynikiem COMMAND
.
Dla mnie najlepsze rozwiązanie jest ukryte w komentarzach odpowiedzi @ ephemient. Po prostu wyciągam to tutaj, żeby nie pozostało niezauważone. Uznanie za to powinno pochodzić z @FRoZeN (i @ephemient).
git diff --shortstat `git hash-object -t tree /dev/null`
zwraca całkowitą liczbę plików i wierszy w katalogu roboczym repozytorium, bez dodatkowego hałasu. Jako bonus liczony jest tylko kod źródłowy - pliki binarne są wykluczane z licznika.
Powyższe polecenie działa w systemach Linux i OS X. Jest to wersja wieloplatformowa
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Działa to również w systemie Windows.
Dla przypomnienia, opcje wykluczania pustych linii,
-w
/ --ignore-all-space
,-b
/ --ignore-space-change
,--ignore-blank-lines
, --ignore-space-at-eol
nie działają, gdy są używane z --shortstat
. Zliczane są puste linie.
git mktree </dev/null
lub true|git mktree
lub git mktree <&-
lub :|git mktree
za jego naciśnięcie-liczniki wśród nas :-) - zapasowy pustym drzewie pływających wokół repo nie będzie bolało niczym.
Działa to od cloc 1.68:
cloc --vcs=git
--vcs
nie działało dla mnie, może zostało usunięte. cloc .
podczas gdy w repozytorium git działało, OTOH.
Bawiłem się z cmder ( http://gooseberrycreative.com/cmder/ ) i chciałem policzyć wiersze html, css, java i javascript. Chociaż niektóre z powyższych odpowiedzi działały, or
wzór w grep nie zadziałał - znalazłem tutaj ( /unix/37313/how-do-i-grep-for-multiple-patterns ), który miałem uciec od tego
Więc tego teraz używam:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
Używam następujących:
git grep ^ | wc -l
Przeszukuje wszystkie pliki wersjonowane przez git w poszukiwaniu wyrażenia regularnego ^
, który reprezentuje początek linii, więc to polecenie podaje całkowitą liczbę linii!
Ja to zrobiłem:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
działa to, jeśli policzysz wszystkie pliki tekstowe w repozytorium jako pliki zainteresowania. Jeśli niektóre są uważane za dokumentację itp., Można dodać filtr wykluczający.
To narzędzie na github https://github.com/flosse/sloc może dać wynik w bardziej opisowy sposób. Stworzy statystyki twojego kodu źródłowego:
: | git mktree | git diff --shortstat --stdin
Lub:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
W zależności od tego, czy chcesz dołączyć pliki binarne, istnieją dwa rozwiązania.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
„xargs -P 4” oznacza, że może czytać pliki przy użyciu czterech równoległych procesów. Może to być bardzo pomocne, jeśli skanujesz bardzo duże repozytoria. W zależności od wydajności maszyny możesz zwiększyć liczbę procesów.
-a, przetwarzaj pliki binarne jako tekst (Uwzględnij plik binarny)
-l '', pokaż tylko nazwy plików zamiast pasujących linii (Skanuj tylko niepuste pliki)
-I, Nie dopasowuj wzorców w plikach binarnych (Wyklucz Binarny) -
buforowane, szukaj w indeksie zamiast w drzewie roboczym (Uwzględnij nieproszone pliki)