Policz liczbę linii w repozytorium git
Jak policzyć całkowitą liczbę linii obecnych we wszystkich plikach w repozytorium git?
git ls-files
daje mi listę plików śledzonych przez git.
Szukam komendy do cat
wszystkich tych plików. Coś jak
git ls-files | [cat all these files] | wc -l
16 answers
xargs
zrobi co chcesz:
git ls-files | xargs cat | wc -l
Ale z większą ilością informacji i chyba lepiej, można zrobić:
git ls-files | xargs wc -l
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-27 22:11:03
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Pokazuje różnice pomiędzy pustym drzewem a bieżącym drzewem roboczym. Co zdarza się liczyć wszystkie linie w bieżącym drzewie roboczym.
Aby uzyskać liczby w bieżącym drzewie roboczym, wykonaj następujące czynności:
git diff --shortstat `git hash-object -t tree /dev/null`
Da ci ciąg podobny do 1770 files changed, 166776 insertions(+)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 09:34:24
Jeśli chcesz tę liczbę, ponieważ chcesz poznać zakres projektu, możesz preferować wyjście CLOC ("licz linie kodu"), które daje podział znaczących i nieistotnych linii kodu według języka.
cloc $(git ls-files)
(ten wiersz jest odpowiednikiem git ls-files | xargs cloc
. Używa sh
' s $()
funkcja zastępowania poleceń.)
Przykładowe wyjście:
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. Możesz prawdopodobnie zainstalować cloc
za pomocą menedżer pakietów – na przykład brew install cloc
z Homebrew.
cloc $(git ls-files)
jest często ulepszeniem w stosunku do cloc .
. Na przykład powyższe Przykładowe wyjście z git ls-files
zgłasza 471 linii kodu. Dla tego samego projektu cloc .
zgłasza aż 456 279 linii (i trwa 6 minut), ponieważ przeszukuje zależności w folderze Git-ignored node_modules
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 17:18:43
Napotkałem problemy z git ls-files | xargs wc -l
podczas pracy z dużą liczbą plików, gdzie liczenia linii zostaną podzielone na wiele linii total
.
Biorąc podpowiedź z pytania Dlaczego narzędzie wc generuje wiele linii z "total"?, znalazłem następujące polecenie, aby ominąć problem:
wc -l $(git ls-files)
Lub jeśli chcesz przejrzeć tylko niektóre pliki, np. kod:
wc -l $(git ls-files | grep '.*\.cs')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:25
Najlepsze rozwiązanie, jak dla mnie, jest zakopane w komentarzach odpowiedzi @ephemient. Wyciągam go tutaj, żeby nie pozostał niezauważony. Zasługa za to powinna iść do @FRoZeN (i @ephemient).
git diff --shortstat `git hash-object -t tree /dev/null`
Zwraca sumę plików i linii w katalogu roboczym repo, bez żadnych dodatkowych szumów. Jako bonus, liczony jest tylko kod źródłowy - pliki binarne są wykluczone z listy.
Powyższe polecenie działa na Linuksie i OS X. wieloplatformowe wersja to
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
To działa również na Windows.
Dla przypomnienia, opcje wyłączenia pustych linii,
-
-w
/--ignore-all-space
, -
-b
/--ignore-space-change
, -
--ignore-blank-lines
, --ignore-space-at-eol
Nie mają żadnego wpływu podczas stosowania z --shortstat
. Puste linie są liczone.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 15:39:44
To działa od cloc 1.68:
cloc --vcs=git
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-16 23:11:37
Używam:
git grep ^ | wc -l
Przeszukuje wszystkie pliki wersjonowane przez git w poszukiwaniu regex ^
, który reprezentuje początek linii, więc to polecenie podaje całkowitą liczbę linii!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 06:46:38
I was playing around with cmder ( http://gooseberrycreative.com/cmder / ) i chciałem policzyć linie html, css,java i javascript. Chociaż niektóre z powyższych odpowiedzi zadziałały, or
wzór w grepie nie-znalazłem tutaj ( https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns ), że musiałem od tego uciec
Więc to jest to, czego używam teraz:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:36:24
Zrobiłem to:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
To działa, jeśli policzysz wszystkie pliki tekstowe w repozytorium jako interesujące pliki. Jeśli niektóre są uważane za dokumentację, itp., można dodać filtr wykluczeń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-21 21:39:51
To narzędzie na GitHubie https://github.com/flosse/sloc może podać dane wyjściowe w bardziej opisowy sposób. Stworzy statystyki twojego kodu źródłowego:
- linie fizyczne
- wiersze kodu (źródło)
- wiersze z komentarzami
- komentarze jednolinijkowe
- wiersze z komentarzami blokowymi
- wiersze pomieszane ze źródłami i komentarzami
- puste linie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-04 08:00:17
Jeśli chcesz znaleźć całkowitą liczbę niepustych linii, możesz użyć AWK:
git ls-files | xargs cat | awk '/\S/{x++} END{print "Total number of non-empty lines:", x}'
Używa regex do liczenia linii zawierających Nie-biały znak.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 20:24:44
: | git mktree | git diff --shortstat --stdin
Lub:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
Try:
find . -type f -name '*.*' -exec wc -l {} +
Na danym katalogu / katalogach
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 13:16:31
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 odczytywać pliki za pomocą 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żna zwiększyć liczbę procesów.
-a, przetwarza pliki binarne jako tekst (Include Binary)
-l ", pokazuje tylko nazwy plików zamiast pasujące linie (Skanuj tylko niepuste pliki)
-I, don ' t match patterns in binary files (Exclude Binary)
--buforowane, szukaj w indeksie zamiast w drzewie roboczym (Include uncommitted files)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-04 18:22:03
Jeśli chcesz uzyskać liczbę wierszy od określonego autora, spróbuj użyć następującego kodu:
git ls-files "*.java" | xargs -I{} git blame {} | grep ${your_name} | wc -l
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-11 03:28:53
Odpowiedź Carla Noruma zakłada, że nie ma plików ze spacjami, jeden ze znaków IFS
, a pozostałe to tab
i newline
. Rozwiązaniem byłoby zakończenie linii bajtem NULL.
git ls-files -z | xargs -0 cat | wc -l
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-19 07:23:08