1020 Stimmen

Anzahl der Zeilen in einem Git-Repository zählen

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

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

Ich suche nach einem Befehl für cat alle diese Dateien. Etwas wie

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

1570voto

Carl Norum Punkte 210051

xargs lässt Sie cat alle Dateien zusammen, bevor sie an wc wie Sie gefragt haben:

git ls-files | xargs cat | wc -l

Aber das Überspringen der Zwischenstufe cat gibt Ihnen mehr Informationen und ist wahrscheinlich besser:

git ls-files | xargs wc -l

448voto

Rory O'Kane Punkte 27128

Wenn Sie diese Zählung wünschen, weil Sie sich einen Überblick über den Umfang des Projekts verschaffen wollen, können Sie die Ausgabe von CLOC ("Count Lines of Code"), die Ihnen eine Aufschlüsselung der wichtigen und unwichtigen Codezeilen nach Sprachen liefert.

cloc $(git ls-files)

(Diese Zeile ist gleichbedeutend mit git ls-files | xargs cloc . Es verwendet sh 's $() Befehlsersetzung Funktion).

Beispielhafte Ausgabe:

      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 installieren cloc mit Ihrem Paketmanager - zum Beispiel, brew install cloc con Selbstgebrautes .

cloc $(git ls-files) ist oft eine Verbesserung gegenüber cloc . . Zum Beispiel die obige Beispielausgabe mit git ls-files meldet 471 Codezeilen. Für dasselbe Projekt, cloc . meldet satte 456.279 Zeilen (und braucht sechs Minuten für die Ausführung), weil es die Abhängigkeiten in der von Git ignorierten node_modules Ordner.

420voto

ephemient Punkte 189038
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

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

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

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

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

75voto

Justin Aquadro Punkte 2200

Ich bin auf Probleme bei der Stapelverarbeitung gestoßen mit git ls-files | xargs wc -l wenn es sich um eine große Anzahl von Dateien handelt, bei denen die Zeilenzahl auf mehrere Dateien aufgeteilt wird total Zeilen.

Einen Tipp aus der Frage nehmen Warum erzeugt das wc-Dienstprogramm 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 wollen, z. B. Code:

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

75voto

hashchange Punkte 6413

Die beste Lösung, jedenfalls für mich, findet sich in den Kommentaren zu @ephemients Antwort. Ich hebe sie hier nur hervor, damit sie nicht unbemerkt bleibt. Das Lob 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 zurück, ohne zusätzliches Rauschen. Als Bonus wird nur der Quellcode gezählt - Binärdateien sind von der Zählung ausgeschlossen.

Der obige Befehl funktioniert unter Linux und OS X. Die plattformübergreifende Version des Befehls lautet

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Das funktioniert auch unter Windows.

Zur Erinnerung: Die Optionen zum Ausschluss von Leerzeilen,

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

haben keine Auswirkung, wenn sie mit --shortstat . Leere Zeilen werden gezählt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X