it-swarm.com.de

Zählen Sie die Anzahl der Zeilen in einem Git-Repository

Wie würde ich die Gesamtzahl der Zeilen in allen Dateien in einem Git-Repository zählen?

git ls-files gibt mir eine Liste von Dateien, die von git verfolgt werden.

Ich suche nach einem Befehl zum cat all diesen Dateien. So etwas wie

git ls-files | [cat all these files] | wc -l
685
Dogbert

xargs macht was Sie wollen:

git ls-files | xargs cat | wc -l

Aber mit mehr Informationen und wahrscheinlich besser können Sie Folgendes tun:

git ls-files | xargs wc -l
1040
Carl Norum
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Dies zeigt die Unterschiede zwischen dem leeren Baum und Ihrem aktuellen Arbeitsbaum. Was passiert, wenn alle Zeilen in Ihrem aktuellen Arbeitsbaum gezählt werden.

Gehen Sie folgendermaßen vor, um die Zahlen in Ihrem aktuellen Arbeitsbaum abzurufen:

git diff --shortstat `git hash-object -t tree /dev/null`

Sie erhalten eine Zeichenfolge wie 1770 files changed, 166776 insertions(+).

321
ephemient

Wenn Sie diese Zählung wünschen, weil Sie sich ein Bild vom Umfang des Projekts machen möchten, bevorzugen Sie möglicherweise die Ausgabe von CLOC („Count Lines of Code“), wodurch Sie eine Aufschlüsselung nach signifikanten und erhalten unbedeutende Codezeilen nach Sprache.

cloc $(git ls-files)

(Diese Zeile entspricht git ls-files | xargs cloc. Sie verwendet die Funktion $() command substitution von sh.)

Beispielausgabe:

      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
-------------------------------------------------------------------------------

Sie müssen zuerst CLOC installieren. Sie können wahrscheinlich cloc mit Ihrem Paketmanager installieren - zum Beispiel brew install cloc mit Homebrew .

cloc $(git ls-files) ist oft eine Verbesserung gegenüber cloc .. Die obige Beispielausgabe mit git ls-files gibt beispielsweise 471 Codezeilen aus. Für dasselbe Projekt meldet cloc . satte 456.279 Zeilen (und die Ausführung dauert sechs Minuten), da die Abhängigkeiten im von Git ignorierten Ordner node_modules durchsucht werden.

285
Rory O'Kane

Ich habe Stapelverarbeitungsprobleme mit git ls-files | xargs wc -l beim Verarbeiten einer großen Anzahl von Dateien festgestellt, bei denen die Zeilenanzahl in mehrere total Zeilen aufgeteilt wird.

Ein Tipp aus Frage Warum generiert das Dienstprogramm wc mehrere Zeilen mit "total"? , ich habe den folgenden Befehl gefunden, um das Problem zu umgehen:

wc -l $(git ls-files)

Oder wenn Sie nur einige Dateien untersuchen möchten, z. Code:

wc -l $(git ls-files | grep '.*\.cs')

51
Justin Aquadro

Die beste Lösung ist für mich in den Kommentaren der Antwort von @ ephemient begraben. Ich ziehe es hier hoch, damit es nicht unbemerkt bleibt. Das Guthaben dafür sollte an @FRoZeN (und @ephemient) gehen.

git diff --shortstat `git hash-object -t tree /dev/null`

gibt die Gesamtzahl der Dateien und Zeilen im Arbeitsverzeichnis eines Repos ohne zusätzliches Rauschen zurück. Als Bonus wird nur der Quellcode gezählt - Binärdateien werden von der Zählung ausgeschlossen.

Der obige Befehl funktioniert unter Linux und OS X. Die plattformübergreifende Version ist

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Das funktioniert auch unter Windows.

Für den Datensatz, die Optionen zum Ausschließen von Leerzeilen,

  • -w/--ignore-all-space,
  • -b/--ignore-space-change,
  • --ignore-blank-lines,
  • --ignore-space-at-eol

bei Verwendung mit --shortstat hat dies keine Auswirkungen. Leerzeilen werden gezählt.

38
hashchange

Dies funktioniert ab cloc 1.68:

cloc --vcs=git

15
kes

Ich habe mit cmder ( http://gooseberrycreative.com/cmder/ ) rumgespielt und wollte die Zeilen von HTML, CSS, Java und Javascript zählen. Während einige der obigen Antworten funktionierten, hat das Muster or in grep nicht funktioniert - ich habe es hier gefunden ( https://unix.stackexchange.com/questions/37313/how-do-i-grep- for-multiple-patterns ) dass ich mich dagegen sträuben musste

Also das ist, was ich jetzt benutze:

git ls-files | grep "\(.html\|.css\|.js\|.Java\)$" | xargs wc -l

8

Ich benutze folgendes:

git grep ^ | wc -l

Dadurch werden alle von git versionierten Dateien nach dem regulären Ausdruck ^ durchsucht, der den Anfang einer Zeile darstellt. Dieser Befehl gibt also die Gesamtzahl der Zeilen an!

6

Dieses Tool auf github https://github.com/flosse/sloc kann die Ausgabe auf eine aussagekräftigere Weise geben. Es wird Statistiken Ihres Quellcodes erstellen:

  • physische Linien
  • codezeilen (Quelle)
  • zeilen mit Kommentaren
  • einzeilige Kommentare
  • zeilen mit Blockkommentaren
  • zeilen verwechselt mit Quelle und Kommentaren
  • leerzeilen
3
love

Ich tat dies:

git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l

dies funktioniert, wenn Sie alle Textdateien im Repository als die Dateien von Interesse zählen. Wenn einige als Dokumentation usw. betrachtet werden, kann ein Ausschlussfilter hinzugefügt werden.

2
Sasha Pachev

Versuchen:

find . -type f -name '*.*' -exec wc -l {} + 

auf das Verzeichnis/Verzeichnisse in Frage

1
Theos
: | git mktree | git diff --shortstat --stdin

Oder:

git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
0
user4427511