Wie würde ich die Gesamtzahl der Zeilen zählen, die in allen Dateien in einem Git-Repository vorhanden sind?
git ls-files
gibt mir eine Liste von Dateien, die von git verfolgt werden.
Ich suche nach einem Befehl für cat
all diese Dateien. Etwas wie
git ls-files | [cat all these files] | wc -l
bash
git
shell
line-count
Dogbert
quelle
quelle
grep cpp |
dort vor demxargs
, dann.git ls-files -z | xargs -0 wc -l
Sie diese Option, wenn Sie Dateien mit Leerzeichen im Namen haben.git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -l
wobei der grep-Teil ein beliebiger Perl-Regex ist, den Sie möchten!git ls-files | grep "\.java$" | xargs wc -l
Dies zeigt die Unterschiede zwischen dem leeren Baum und Ihrem aktuellen Arbeitsbaum. Was passiert, um alle Zeilen in Ihrem aktuellen Arbeitsbaum zu zählen.
Gehen Sie folgendermaßen vor, um die Zahlen in Ihrem aktuellen Arbeitsbaum abzurufen:
Es wird Ihnen eine Zeichenfolge wie geben
1770 files changed, 166776 insertions(+)
.quelle
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`
, um die letzte Zeile zu erhalten. Der Schwanz wird nicht benötigt.Wenn Sie diese Anzahl 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“), mit der Sie wichtige und unbedeutende Codezeilen nach Sprache aufschlüsseln können.
(Diese Zeile entspricht
git ls-files | xargs cloc
. Sie verwendetsh
die$()
Befehlsersetzungsfunktion .)Beispielausgabe:
Sie müssen zuerst CLOC installieren. Sie können wahrscheinlich mit Ihrem Paketmanager installieren
cloc
- zum Beispielbrew install cloc
mit Homebrew .cloc $(git ls-files)
ist oft eine Verbesserung gegenübercloc .
. In der obigen Beispielausgabe werden beispielsweisegit ls-files
471 Codezeilen gemeldet.cloc .
Meldet für dasselbe Projekt satte 456.279 Zeilen (und die Ausführung dauert sechs Minuten), da die Abhängigkeiten imnode_modules
Ordner " Git ignoriert " durchsucht werden .quelle
cloc --vcs git
heutzutage nur verwenden , wodurch einige Randfälle mit schlecht benannten Dateien (oder zu vielen von ihnen) vermieden werden.git ls-files | xargs wc -l
Beim Umgang mit einer großen Anzahl von Dateien sind Stapelprobleme aufgetreten , bei denen die Zeilenanzahl in mehreretotal
Zeilen aufgeteilt wird.Einen Tipp aus der Frage nehmen 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. B. Code:
wc -l $(git ls-files | grep '.*\.cs')
quelle
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z)
. Die<(COMMAND)
Syntax gibt den Namen einer Datei zurück, deren Inhalt das Ergebnis von istCOMMAND
.Die beste Lösung ist für mich jedenfalls in den Kommentaren der Antwort von @ ephemient begraben. Ich ziehe es nur hier hoch, damit es nicht unbemerkt bleibt. Das Guthaben hierfür sollte an @FRoZeN (und @ephemient) gehen.
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 Abrechnung ausgeschlossen.
Der obige Befehl funktioniert unter Linux und OS X. Die plattformübergreifende Version davon ist
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
haben keine Wirkung bei Verwendung mit
--shortstat
. Leerzeilen werden gezählt.quelle
git mktree </dev/null
odertrue|git mktree
odergit mktree <&-
oder:|git mktree
für die Tastenschalter unter uns :-) - ein leerer Ersatzbaum, der um das Repo schwebt, wird nichts verletzen.Dies funktioniert ab Cloc 1.68:
cloc --vcs=git
quelle
--vcs
hat bei mir nicht funktioniert, vielleicht wurde es entfernt.cloc .
während im git repo funktionierte, OTOH.Ich habe mit cmder ( http://gooseberrycreative.com/cmder/ ) herumgespielt und wollte die Zeilen von HTML, CSS, Java und Javascript zählen. Während einige der obigen Antworten funktionierten, funktionierte das
or
Muster in grep nicht - ich fand es hier ( /unix/37313/how-do-i-grep-for-multiple-patterns ), das ich hatte um ihm zu entkommenDas ist es, was ich jetzt benutze:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
quelle
Ich benutze folgendes:
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!quelle
Ich war das:
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.
quelle
Dieses Tool auf github https://github.com/flosse/sloc kann die Ausgabe aussagekräftiger darstellen . Es werden Statistiken Ihres Quellcodes erstellt:
quelle
Versuchen:
auf das betreffende Verzeichnis / Verzeichnisse
quelle
Oder:
quelle
Je nachdem, ob Sie Binärdateien einschließen möchten oder nicht, gibt es zwei Lösungen.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
-a, Binärdateien als Text verarbeiten (Binär einschließen)
-l '', nur Dateinamen anstelle übereinstimmender Zeilen anzeigen (Nur nicht leere Dateien scannen )
-I, Muster in Binärdateien nicht
abgleichen (Binär ausschließen) --cached, Suche im Index statt im Arbeitsbaum (nicht festgeschriebene Dateien einschließen)
quelle