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 ...
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.
git shortlog
ist eine Möglichkeit.
git rev-list HEAD --count
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.
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.
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.
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:
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 .
Du kannst einfach benutzen:
git shortlog -s -n
Ergebnis:
827 user one
15 user two
2 Gest
Ein einfacher Weg ist:
git log --oneline | wc -l
oneline
sorgt dafür.
Der einfachste Weg, um eine Variable zu erstellen, ist:
export GIT_REV_COUNT=`git rev-list --all --count`
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
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? .
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.
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)
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.
Das, was ich früher benutzte, war:
git log | grep "^commit" | wc -l
Einfach, aber es hat funktioniert.
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.
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
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
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"