wake-up-neo.com

Wie erhalte ich die Anzahl der Git-Commits?

Ich möchte die Anzahl der Commits meines Git-Repositorys erhalten, ähnlich wie bei SVN-Revisionsnummern.

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

Das mache ich momentan unter Unix/Cygwin/msysGit so:

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

Aber ich fühle es ist ein bisschen ein Hack.

Gibt es einen besseren Weg, das zu tun? Es wäre cool, wenn ich wc oder gar Git nicht bräuchte, damit es auf einem nackten Windows funktionieren könnte. Lesen Sie einfach eine Datei oder eine Verzeichnisstruktur ...

699
Splo

So ermitteln Sie die Anzahl der Commits für eine Revision (HEAD, master, ein Commit-Hash):

git rev-list --count <revision>

So ermitteln Sie die Anzahl der Festschreibungen in allen Zweigen:

git rev-list --all --count

Ich empfehle, dies nicht für die Build-ID zu verwenden, aber wenn Sie müssen, ist es wahrscheinlich am besten, die Anzahl für den Zweig zu verwenden, gegen den Sie bauen. Auf diese Weise hat dieselbe Revision immer dieselbe Nummer. Wenn Sie die Anzahl für alle Zweige verwenden, kann die Anzahl durch Aktivitäten in anderen Zweigen geändert werden.

1047
Benjamin Atkin

git shortlog ist eine Möglichkeit.

146
Rayne

git rev-list HEAD --count

Git Rev-Liste

git rev-list <commit>: Listet Commits auf, die über die übergeordneten Links des angegebenen Commits erreichbar sind (in diesem Fall HEAD).

--count: Gibt eine Zahl aus, aus der hervorgeht, wie viele Commits aufgelistet worden wären, und unterdrückt alle anderen Ausgaben.

103
Jake Berger

Dieser Befehl gibt die Anzahl der von Committern gruppierten Commits zurück:

git shortlog -s

Ausgabe:

14 John lennon
9  Janis Joplin

Vielleicht möchten Sie wissen, dass das Argument -s die Kontraktionsform von --summary ist.

82
Alex Pliutau

Wenn Sie nach einem eindeutigen und dennoch gut lesbaren Bezeichner für Commits suchen, ist git describe möglicherweise genau das Richtige für Sie.

53
Bombe

Sie sind nicht der erste, der über eine "Revisionsnummer" in Git ​​nachdenkt, aber "wc" ist ziemlich gefährlich, da ein Commit gelöscht oder gequetscht werden kann und der Verlauf erneut aufgerufen werden kann.

Die "Revisionsnummer" war für Subversion besonders wichtig, da sie im Falle einer Zusammenführung benötigt wurde (SVN1.5 und 1.6 haben sich in dieser Hinsicht verbessert).

Sie könnten einen Pre-Commit-Hook erhalten, der eine Revisionsnummer in den Kommentar einschließt, wobei ein Algorithmus nicht die gesamte Historie nachschlägt einer Niederlassung, um die richtige Anzahl zu bestimmen.

Bazaar hat sich tatsächlich einen solchen Algorithmus ausgedacht, und es könnte ein guter Ausgangspunkt für sein was willst du tun.

(Wie Bombes Antwort ​​zeigt, hat Git tatsächlich einen eigenen Algorithmus, der auf dem neuesten Tag, der Anzahl der Commits und einem SHA-1-Schlüssel basiert). Sie sollten seine Antwort sehen (und positiv bewerten), wenn sie für Sie funktioniert.


Zur Veranschaulichung von Aarons Idee können Sie auch den Git-Commit-Hash in die "info" -Datei einer Anwendung anhängen , die Sie mit Ihrer Anwendung verteilen.

Auf diese Weise würde die About-Box folgendermaßen aussehen:

About box

Die Anwendungsnummer ist Teil des Commits, aber die "Info" -Datei der Anwendung wird während des Paketierungsprozesses generiert, wodurch eine anwendungsbezogene Build-Nummer effektiv mit einer technischen Revision verknüpft wird . id .

33
VonC

Du kannst einfach benutzen:

git shortlog -s -n

Ergebnis:

 827  user one
    15  user two
     2  Gest 
29
demenvil

Ein einfacher Weg ist:

 git log --oneline | wc -l

oneline sorgt dafür.

21
Jimmy Kane

Der einfachste Weg, um eine Variable zu erstellen, ist:

export GIT_REV_COUNT=`git rev-list --all --count`
21
John Gietzen

Git Shortlog ist eine Möglichkeit, die Commit-Details abzurufen:

git shortlog -s -n

Dies gibt die Anzahl der Commits gefolgt vom Namen des Autors an. Mit der Option -s werden alle Festschreibungsnachrichten für jede Festschreibung des Autors entfernt. Deaktivieren Sie dieselbe Option, wenn Sie auch die Commit-Nachrichten anzeigen möchten. Die Option -n wird zum Sortieren der gesamten Liste verwendet. Hoffe das hilft.

git rev-parse --short HEAD

8
makuchaku

Es gibt ein Nizza-Hilfsskript, mit dessen Hilfe die Git-Leute eine nützliche Versionsnummer auf der Grundlage der Git-Beschreibung erstellen können. Ich zeige das Skript und erkläre es in meiner Antwort an Wie würden Sie die aktuelle Festschreibungs-ID in die Dateien eines Git-Projekts aufnehmen? .

7
Pat Notz

Wenn Sie nur einen Zweig wie master verwenden, funktioniert dies meiner Meinung nach hervorragend:

git rev-list --full-history --all | wc -l

Dies gibt nur eine Zahl aus. Sie können es zu etwas wie alias

git revno

dinge wirklich bequem zu machen. Bearbeiten Sie dazu Ihre .git/config -Datei und fügen Sie diese hinzu in:

[alias]
    revno = "!git rev-list --full-history --all | wc -l"

Dies funktioniert nicht unter Windows. Ich kenne nicht das Äquivalent von "wc" für dieses Betriebssystem, aber ein Python -Skript zu schreiben, um die Zählung für Sie durchzuführen, wäre eine plattformübergreifende Lösung.

4
NuclearPeon

In unserer Firma sind wir von SVN zu Git gewechselt. Das Fehlen von Revisionsnummern war ein großes Problem!

Führen Sie git svn clone aus und kennzeichnen Sie das letzte 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 abrufen

git describe --tags --long

Dieser Befehl gibt so etwas wie:

7603-3-g7f4610d

Bedeutet: Das letzte Tag ist 7603 - es ist die SVN-Revision. 3 - ist die Anzahl der Commits. 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)
3
Matvey

Generieren Sie während des Builds eine Nummer und schreiben Sie diese in eine Datei. Übertragen Sie diese Datei bei jeder Veröffentlichung mit dem Kommentar "Build 147" (oder unabhängig von der aktuellen Build-Nummer). Übertragen Sie die Datei nicht während der normalen Entwicklung. Auf diese Weise können Sie auf einfache Weise zwischen Build-Nummern und Versionen in Git mappen.

3
Aaron Digulla

Das, was ich früher benutzte, war:

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

Einfach, aber es hat funktioniert.

1

Unter Verwendung der Bash-Syntax

$(git rev-list --count HEAD)

sieht gut aus für rein lineare Geschichte. Wenn Sie auch manchmal "Nummern" aus Zweigen haben möchten (basierend auf master), berücksichtigen Sie Folgendes:

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

Wenn Sie von einem Checkout von master ausgehen, erhalten Sie einfach 1234.0 oder ähnliches. Wenn Sie von einem Checkout eines Zweigs ausgehen, erhalten Sie etwas wie 1234.13, wenn in diesem Zweig 13 Commits durchgeführt wurden. Offensichtlich ist dies nur insofern nützlich, als Sie höchstens einen Zweig einer bestimmten master Revision zugrunde legen.

--first-parent könnte zur Mikronummer hinzugefügt werden, um einige Commits zu unterdrücken, die nur durch das Zusammenführen anderer Zweige entstehen, obwohl dies wahrscheinlich nicht erforderlich ist.

1
Jesse Glick

Du kannst es versuchen

git log --oneline | wc -l

oder um alle Commits aufzulisten, die von den Personen im Repository ausgeführt wurden

git shortlog -s
1
user7161360

git config --global alias.count 'rev-list --all --count'

Wenn Sie dies zu Ihrer Konfiguration hinzufügen, können Sie einfach auf den Befehl verweisen.

git count

1
Robert Pounder

Verwenden Sie Git Shortlog einfach so

git shortlog -sn

Oder erstellen Sie einen Alias ​​(für ZSH-basiertes Terminal)

# show contributors by commits alias gcall="git shortlog -sn"

0
Ahmad Awais