1008 Stimmen

Wie erhalte ich die Anzahl der Git-Commits?

Ich möchte die Anzahl der Übertragungen meines Git-Repositorys abfragen, ähnlich wie die Revisionsnummern in SVN.

Das Ziel ist es, sie als eindeutige, aufsteigende Build-Nummer zu verwenden.

Ich mache das derzeit auf Unix/Cygwin/msysGit:

git log --pretty=format:'' | wc -l

Aber ich finde, es ist ein bisschen wie ein Hacken.

Gibt es eine bessere Möglichkeit, dies zu tun? Es wäre cool, wenn ich tatsächlich keine wc oder sogar Git, so dass es auf einem nackten Windows funktionieren könnte. Einfach eine Datei oder eine Verzeichnisstruktur lesen...

2 Stimmen

Vielleicht finden Sie hier interessante Antworten: Was ist das Git-Äquivalent für die Revisionsnummer?

249 Stimmen

git rev-list HEAD --count Git-Rev-Liste

19 Stimmen

@jberger: Ich denke, Ihr Kommentar sollte in eine Antwort umgewandelt werden.

4voto

Jesse Glick Punkte 23182

Verwendung der Bash-Syntax,

$(git rev-list --count HEAD)

sieht für eine rein lineare Geschichte gut aus. Wenn Sie auch manchmal "Zahlen" von Zweigen haben wollen (basierend auf master ), berücksichtigen:

$(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD)

Bei der Ausführung aus einer Kasse von master erhalten Sie einfach 1234.0 oder dergleichen. Wenn Sie es von einem Checkout einer Verzweigung aus ausführen, erhalten Sie etwas wie 1234.13 wenn in diesem Zweig 13 Übertragungen vorgenommen wurden. Offensichtlich ist dies nur insofern nützlich, als dass Sie höchstens einen Zweig aus einem gegebenen master Revision.

--first-parent könnte zur Mikro-Nummer hinzugefügt werden, um einige Übertragungen zu unterdrücken, die nur durch das Zusammenführen anderer Zweige entstanden sind, obwohl dies wahrscheinlich unnötig ist.

3voto

Matvey Punkte 31

In unserem Unternehmen sind wir von SVN auf Git umgestiegen. Das Fehlen von Revisionsnummern war ein großes Problem!

Faites git svn clone und markieren Sie dann den letzten SVN-Commit mit der SVN-Revisionsnummer:

export hr=`git svn find-rev HEAD`
git tag "$hr" -f HEAD

Dann können Sie die Revisionsnummer mit Hilfe von

git describe --tags --long

Dieser Befehl ergibt etwas wie:

7603-3-g7f4610d

Bedeutet: Der letzte Tag ist 7603 - das ist die SVN-Revision. 3 - ist die Anzahl der Übertragungen von ihr. Wir müssen sie hinzufügen.

Die Revisionsnummer kann also mit diesem Skript gezählt werden:

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)

3voto

VonC Punkte 1117238

git shortlog allein beantwortet nicht die ursprüngliche Frage nach der Gesamtzahl der Übertragungen (nicht nach Autor gruppiert)

Das ist richtig, und git rev-list HEAD --count bleibt die einfachste Antwort.

Mit Git 2.29 (Q4 2020) wird jedoch " git shortlog " ( man ) hat sich präzisiert.
Es wurde gelehrt, dass gruppiert Übertragungen nach dem Inhalt der Trailer-Zeilen , wie " Reviewed-by: ", " Coauthored-by: ", usw.

Siehe festlegen 63d24fa , Übergabe 56d5dde , commit 87abb96 , Übergabe f17b0b9 , 47beb37 festlegen , Übergabe f0939a0 , Commit 92338c4 (27. September 2020), und 45d93eb übertragen (25. September 2020) von Jeff King ( peff ) .
(Zusammengefasst von Junio C. Hamano -- gitster -- sur Übergabe 2fa8aac , 04. Oktober 2020)

shortlog : mehrere Gruppen können angegeben werden

Abgezeichnet von: Jeff King

Nun, da shortlog das Lesen von Anhängern unterstützt, kann es nützlich sein, Zählungen von mehreren Anhängern oder zwischen Anhängern und Autoren zu kombinieren.
Dies kann manuell durch Nachbearbeitung der Ausgabe von mehreren Durchläufen geschehen, aber es ist nicht trivial, sicherzustellen, dass jedes Name/Commit-Paar nur einmal gezählt wird.

Dieser Patch bringt shortlog bei, dass es mehrere --group Optionen in der Befehlszeile und ziehen Sie Daten aus allen diesen Optionen.

Das macht es möglich zu laufen:

git shortlog -ns --group=author --group=trailer:co-authored-by  

um ein Kurzprotokoll zu erhalten, das Autoren und Mitautoren gleichermaßen zählt.

Die Umsetzung ist größtenteils unproblematisch. Die " group Die Aufzählung "enum" wird zu einem Bitfeld, und der Schlüssel des Anhängers wird zu einer Liste.
Ich habe mir nicht die Mühe gemacht, die Multi-Gruppen-Semantik für das Lesen von stdin zu implementieren. Es wäre möglich, zu tun, aber die bestehenden passenden Code macht es umständlich, und ich bezweifle, jemand kümmert.

Die Unterdrückung von Duplikaten, die wir für Trailer verwendet haben, deckt nun auch Autoren und Committer ab (obwohl wir im Einzelgruppenmodus ohne Trailer das Einfügen und Nachschlagen von Hashs überspringen können, da wir nur einen Wert pro Commit sehen).

Es gibt eine kleine Besonderheit: Wir kümmern uns jetzt um den Fall, dass kein Gruppenbit gesetzt ist (in diesem Fall zeigen wir standardmäßig den Autor an).
Der Anrufer in builtin/log.c muss so angepasst werden, dass ausdrücklich nach den Autoren gefragt wird, anstatt sich auf die shortlog_init() . Es wäre möglich, dies mit ein paar Tricks zu erreichen, aber für einen einzelnen Anrufer ist es das nicht wert.

git shortlog umfasst nun in seinem Manpage :

--group=<type>

Gruppieren Sie Commits basierend auf <type> . Wenn keine --group Option ist angegeben, ist der Standardwert author . <type> ist einer von:

  • author Übertragungen werden nach Autor gruppiert.
  • committer werden Commits nach Committer gruppiert (genau wie bei -c )

Dies ist ein Alias für --group=committer .

git shortlog umfasst nun auch in seinem Manpage :

Si --group mehrfach angegeben wird, werden die Übertragungen unter jedem Wert gezählt (aber wiederum nur einmal pro eindeutigem Wert in dieser Übertragung). Für Beispiel, git shortlog --group=author --group=trailer:co-authored-by zählt sowohl Autoren als auch Mitautoren.

3voto

Aaron Digulla Punkte 308693

Erzeugt während des Builds eine Nummer und schreibt sie in eine Datei. Wenn Sie eine neue Version erstellen, übertragen Sie diese Datei mit dem Kommentar "Build 147" (oder was auch immer die aktuelle Build-Nummer ist). Übertragen Sie die Datei nicht während der normalen Entwicklung. Auf diese Weise können Sie in Git leicht zwischen Build-Nummern und Versionen unterscheiden.

2voto

Robert Massaioli Punkte 13111

Die, die ich früher benutzt habe, war:

git log | grep "^commit" | wc -l

Einfach, aber es hat funktioniert.

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