Ich möchte die Anzahl der Commits meines Git-Repositorys erhalten, ähnlich wie die SVN-Revisionsnummern.
Das Ziel ist es, es als eindeutige, inkrementierende Build-Nummer zu verwenden.
Das gefällt mir derzeit unter Unix / Cygwin / msysGit:
git log --pretty=format:'' | wc -l
Aber ich denke, es ist ein bisschen ein Hack.
Gibt es einen besseren Weg, das zu tun? Es wäre cool, wenn ich wc
Git nicht brauchen würde , also könnte es auf einem nackten Windows funktionieren. Lesen Sie einfach eine Datei oder eine Verzeichnisstruktur ...
git
build-process
revision
Splo
quelle
quelle
git rev-list HEAD --count
Git Rev-ListeAntworten:
Um eine Festschreibung Zählung für eine Revision (
HEAD
,master
, ein Commit Hash):So erhalten Sie die Commit-Anzahl für alle Zweige:
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, für den Sie erstellen. 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.
quelle
git shortlog | grep -E '^[ ]+\w+' | wc -l
Wenn Sie die Gesamtzahl erhalten möchten undgit shortlog | grep -E '^[^ ]'
wenn Sie die Commit-Nummer für jeden Mitwirkenden erhalten möchten.wc -l
. Minimalismus FTW. Ich habe es in meine Antwort aufgenommen.git log --pretty=format:'' | wc -l
in der ursprünglichen Frage angegebenen Ansatz) als auch falsch: Sie können dies sehen, indem Sie die Übereinstimmung umkehren (git shortlog | grep -Ev '^[ ]+\w+'
) und feststellen , dass z. B. Commits ohne Nachricht (dh "<keine>") nicht gezählt werden. Die Verwendunggit rev-list HEAD --count
ist sowohl prägnanter als auch genauer.git rev-list HEAD --count
jetzt eine bessere Lösung ist.git log --oneline | wc -l
git shortlog
ist eine Möglichkeit.quelle
git rev-list HEAD --count
eher den ursprünglichen Ansatz vorschlagen, der im OP angegeben ist. In meinen Testsgit log --pretty=format:'' | wc -l
ist um eins aus.git log --oneline | wc -l
ist nicht um eins ausgeschaltet (OS X 10.8.5).git rev-list HEAD --count
Git Rev-Liste
git rev-list <commit>
: Listen Sie Commits auf, die erreichbar sind, indem Sie den übergeordneten Links des angegebenen Commits folgen (in diesem Fall HEAD ).--count
: Drucken Sie eine Zahl aus, die angibt, wie viele Commits aufgelistet worden wären, und unterdrücken Sie alle anderen Ausgaben.quelle
Dieser Befehl gibt die Anzahl der nach Committern gruppierten Commits zurück:
Ausgabe:
Vielleicht möchten Sie wissen, dass das
-s
Argument die Kontraktionsform von ist--summary
.quelle
git shortlog
an sich geht nicht auf die ursprüngliche Frage der Gesamtzahl der Commits ein (nicht nach Autor gruppiert). Verwenden Siegit rev-list HEAD --count
stattdessen.| sort -n
auchWenn Sie nach einer eindeutigen und dennoch gut lesbaren Kennung für Commits suchen, ist git description möglicherweise genau das Richtige für Sie.
quelle
Sie sind nicht der erste, der über eine "Revisionsnummer" in Git nachdenkt , aber '
wc
' ist ziemlich gefährlich, da Commit gelöscht oder gequetscht werden kann und der Verlauf erneut überprüft wird.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).
Möglicherweise erhalten Sie einen Pre-Commit-Hook, der eine Revisionsnummer in den Kommentar enthält. Bei einem Algorithmus wird nicht der gesamte Verlauf eines Zweigs nachgeschlagen, um die richtige Nummer zu ermitteln.
Bazaar hat tatsächlich einen solchen Algorithmus entwickelt , und er kann ein guter Ausgangspunkt für das sein, was Sie tun möchten.
(Wie Bombes Antwort hervorhebt, hat Git tatsächlich einen eigenen Algorithmus, der auf dem neuesten Tag plus der Anzahl der Commits plus ein bisschen SHA-1-Schlüssel basiert.) Sie sollten seine Antwort sehen (und positiv bewerten), wenn sie für Sie funktioniert.
Um Aarons Idee zu veranschaulichen , können Sie den Git-Commit-Hash auch an 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 anwendbare Nummer ist Teil des Commits, aber die "Info" -Datei der Anwendung wird während des Verpackungsprozesses generiert, wodurch eine anwendbare Build-Nummer effektiv mit einer technischen Revisions- ID verknüpft wird .
quelle
Sie können nur verwenden:
Ergebnis:
quelle
Ein einfacher Weg ist:
oneline
versichert dass.quelle
Um es in eine Variable zu bringen, ist der einfachste Weg:
quelle
git rev-list
der Tat ist das richtige Werkzeug zu verwenden, nichtgit log
wie das andere sagen.wc -l
nur den--count
Schalter verwenden :git rev-list --all --count
.--count
Schalter selbst.Git Shortlog ist eine Möglichkeit, die Commit-Details abzurufen:
Dies gibt die Anzahl der Commits an, gefolgt vom Autorennamen. Mit der Option -s werden alle Festschreibungsnachrichten für jede vom Autor vorgenommene Festschreibung entfernt. Entfernen Sie dieselbe Option, wenn Sie auch die Festschreibungsnachrichten anzeigen möchten. Die Option -n wird zum Sortieren der gesamten Liste verwendet. Hoffe das hilft.
quelle
git shortlog
an sich geht nicht auf die ursprüngliche Frage der Gesamtzahl der Commits ein (nicht nach Autor gruppiert). Verwenden Siegit rev-list HEAD --count
stattdessen.git rev-parse --kurzer KOPF
quelle
Es gibt ein nettes Hilfsskript, mit dem die Git-Leute eine nützliche Versionsnummer basierend auf der Beschreibung von Git generieren. Ich zeige das Skript und erkläre es in meiner Antwort auf Wie würden Sie die aktuelle Commit-ID in die Dateien eines Git-Projekts aufnehmen? .
quelle
Wenn Sie nur einen Zweig wie Master verwenden, funktioniert dies meiner Meinung nach hervorragend:
Dies gibt nur eine Zahl aus. Sie können es auf so etwas alias
um die Dinge wirklich bequem zu machen. Bearbeiten Sie dazu Ihre
.git/config
Datei und fügen Sie diese hinzu:Dies funktioniert unter Windows nicht. Ich kenne das Äquivalent von "wc" für dieses Betriebssystem nicht, aber ein Python-Skript zu schreiben, um das Zählen für Sie durchzuführen, wäre eine plattformübergreifende Lösung.
BEARBEITEN : Zählen Sie zwischen zwei Commits:
Ich suchte nach einer Antwort, die zeigen würde, wie die Anzahl der Commits zwischen zwei willkürlichen Revisionen ermittelt werden kann, und sah keine.
quelle
Generieren Sie während des Builds eine Nummer und schreiben Sie sie in eine Datei. Wenn Sie eine Veröffentlichung vornehmen, schreiben Sie diese Datei mit dem Kommentar "Build 147" fest (oder wie auch immer die aktuelle Build-Nummer lautet). Übernehmen Sie die Datei nicht während der normalen Entwicklung. Auf diese Weise können Sie in Git problemlos zwischen Build-Nummern und Versionen zuordnen.
quelle
In unserer Firma sind wir von SVN zu Git gewechselt. Das Fehlen von Revisionsnummern war ein großes Problem!
Tun Sie dies
git svn clone
und kennzeichnen Sie das letzte SVN-Commit mit seiner SVN-Revisionsnummer:Dann können Sie die Revisionsnummer mit Hilfe von erhalten
Dieser Befehl gibt so etwas wie:
Mittel: Das letzte Tag ist 7603 - es ist die SVN-Revision. 3 - ist die Anzahl der Commits davon. Wir müssen sie hinzufügen.
Die Revisionsnummer kann also mit diesem Skript gezählt werden:
quelle
Die, die ich verwendet habe, war:
Einfach, aber es hat funktioniert.
quelle
Verwenden der Bash-Syntax,
sieht gut aus für rein lineare Geschichte. Wenn Sie manchmal auch "Zahlen" aus Zweigen haben möchten (basierend auf
master
), beachten Sie:Wenn Sie von einer Kasse aus laufen
master
, erhalten Sie einfach1234.0
oder dergleichen. Wenn Sie von einer Kasse eines Zweigs ausgeführt werden, erhalten Sie so etwas wie1234.13
, wenn 13 Commits für diesen Zweig vorgenommen wurden. Offensichtlich ist dies nur insofern nützlich, als Sie höchstens einen Zweig von einem bestimmten abstellenmaster
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.quelle
Du kannst es versuchen
oder um alle Commits aufzulisten, die von den im Repository beitragenden Personen ausgeführt wurden
quelle
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
quelle
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"
quelle
Wie wäre es mit einem
alias
?quelle