Jak policzyć całkowitą liczbę wierszy obecnych we wszystkich plikach w repozytorium git?
git ls-files
daje mi listę plików śledzonych przez git.
Szukam polecenia do cat
wszystkich tych plików. Coś jak
git ls-files | [cat all these files] | wc -l
bash
git
shell
line-count
Dogbert
źródło
źródło
grep cpp |
tamxargs
.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
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:
To da ci ciąg jak
1770 files changed, 166776 insertions(+)
.źródło
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.
(Ta linia jest równoważna
git ls-files | xargs cloc
. Wykorzystujesh
„S$()
podstawienie polecenia funkcji).Przykładowe dane wyjściowe:
Najpierw musisz zainstalować CLOC. Prawdopodobnie można zainstalować
cloc
z menadżera pakietów - na przykładbrew install cloc
z Homebrew .cloc $(git ls-files)
jest często lepszym rozwiązaniemcloc .
. Na przykład powyższy przykładowy wynik zgit ls-files
raportami 471 wierszy kodu. W przypadku tego samego projektucloc .
zgłasza ogromną liczbę 456 279 wierszy (i trwa sześć minut), ponieważ przeszukuje zależności wnode_modules
folderze ignorowanym przez Git .źródło
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 wieletotal
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')
źródło
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 wynikiemCOMMAND
.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).
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
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.źródło
git mktree </dev/null
lubtrue|git mktree
lubgit 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
źródło
--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 tegoWięc tego teraz używam:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
źródło
Używam następujących:
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!źródło
Ja to zrobiłem:
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.
źródło
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:
źródło
Próbować:
w danym katalogu / katalogach
źródło
Lub:
źródło
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
-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)
źródło