Frage

Ich möchte die Zahl der Commits meiner Git-Repository bekommen, ein bisschen wie SVN Revisionsnummern.

Das Ziel ist es als einzigartig zu verwenden, die Zahl erhöht werden bauen.

ich zur Zeit wie das zu tun, auf Unix / Cygwin / msysGit:

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

Aber ich glaube, es ist ein bisschen wie ein Hack.

Gibt es einen besseren Weg, dies zu tun? Es wäre cool, wenn ich eigentlich nicht wc brauchen oder sogar Git, so könnte es auf einem nackten Windows. Lesen Sie einfach eine Datei oder ein Verzeichnis-Struktur ...

War es hilfreich?

Lösung

Um eine Zählung für eine Revision (HEAD, master, ein Commit Hash) begehen:

git rev-list --count <revision>

Um die Zählung in allen Zweigen begehen:

git rev-list --all --count

Ich empfehle gegen die Verwendung dieses für Build-Kennung, aber wenn es sein muss, ist es wahrscheinlich am besten, die Zählung für den Zweig verwenden Sie bauen gegen. Auf diese Weise die gleiche Revision wird die gleiche Anzahl immer hat. Wenn Sie die Zählung für alle Branchen verwenden, Aktivität auf andere Branchen könnte die Nummer ändern.

Andere Tipps

git shortlog ist eine Möglichkeit.

git rev-list HEAD --count

git rev-list

git rev-list <commit>: Liste verpflichtet, die indem Sie die Eltern-Links von der gegebenen begehen erreichbar sind (in diesem Fall HEAD ).

--count. Drucken Sie eine Nummer angibt, wie viele Commits wurden aufgeführt würden, und unterdrücken alle anderen Ausgang

Dieser Befehl gibt die Zählung von Committer gruppiert Commits:

git shortlog -s

Ausgabe:

14 John lennon
9  Janis Joplin

Sie möchten wissen, dass das -s Argument der Kontraktion Form --summary ist.

Wenn Sie sich für eine einzigartige und noch recht lesbare Kennung für Commits suchen, git beschreiben könnte genau das Richtige für Sie sein.

Sie sind nicht der erste über eine „Versionsnummer“ in Git , aber ‚wc‘ ziemlich gefährlich ist, kann da gelöscht oder zerquetscht commit werden, und die Geschichte revisited.

Die „Revisionsnummer“ war besonders wichtig für Subversion, da es wurde bei merge benötigt ( SVN1.5 und 1,6 haben an dieser Front verbessert).

Sie können mit einem am Ende pre-commit Haken, der eine Revisionsnummer im Kommentar enthalten würde, mit einem Algorithmus nicht beteiligt suchen, um die alle Geschichte eines Zweig oben die richtige Anzahl zu bestimmen.

Bazaar kam tatsächlich mit ein solcher Algorithmus , und es kann ein guter Ausgangspunkt für was Sie tun möchten.

(wie Bombe Antwort darauf hinweist, Git hat tatsächlich einen Algorithmus der eigenen, auf der Grundlage des neuesten Tag sowie die Anzahl der Commits, sowie ein bisschen einer SHA-1-Taste). Sie sollten sehen (und upvote) seine Antwort, wenn es für Sie arbeitet.


Um Aarons Idee illustrieren, können Sie auch anhängen das Git Hash in eine Anwendung commit „info“ Datei mit Ihrer Anwendung verteilen.

Auf diese Weise würde die Info-Box wie folgt aussehen:

Info-Feld

Die applicative Nummer ist Teil einer Übertragung, aber die ‚Anwendung‚info‘Datei‘ wird während des Verpackungsprozesses erzeugt wird, effektiv Verknüpfung eines applicative Build-Nummer auf eine technische Überarbeitung id .

U kann nur verwendet werden:

git shortlog -s -n

Ergebnis:

 827  user one
    15  user two
     2  Gest 

Um es in eine Variable zu erhalten, ist der einfachste Weg:

export GIT_REV_COUNT=`git rev-list --all --count`

Ein einfacher Weg ist:

 git log --oneline | wc -l

oneline, dass gewährleistet ist.

Git shortlog ist eine Möglichkeit, die verpflichten Details zu erhalten:

git shortlog -s -n

Dies gibt die Anzahl der vom Autor Name gefolgt Commits. Die Option -s entfernt alle Commit-Nachrichten für jeden verpflichten, dass der Autor gemacht. Entfernen Sie die gleiche Option, wenn Sie die Commit-Nachrichten auch sehen möchten. Die Option -n ist für die Sortierung der gesamten Liste verwendet. Hoffe, das hilft.

git rev-parsen --short HEAD

Es gibt einen schönen Helfer-Skript, das die Git Leute helfen eine nützliche Versionsnummer beschreibt basierend auf Git nutzen zu generieren. Ich zeige das Drehbuch und erklären es in meiner Antwort auf Wie würden Sie den aktuellen Commit-ID in einem Git-Projekt-Dateien enthalten? .

Wenn Sie nur einen Zweig mit, wie Master, ich denke, das würde funktionieren groß:

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

Dies wird nur dann ausgegeben, eine Nummer. Sie können es zu etwas alias wie

git revno

, um die Dinge wirklich bequem zu machen. Dazu bearbeiten Sie Ihre .git/config Datei und fügen Sie diese in:

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

Dies wird nicht unter Windows arbeiten. Ich weiß nicht, das Äquivalent von „WC“ für das Betriebssystem, sondern ein Python-Skript zu schreiben, das Zählen zu tun für Sie eine Multi-Plattform-Lösung wäre.

Erzeugen Sie eine Nummer während des Build und schreibt sie in eine Datei. Jedes Mal, wenn Sie ein Release machen, begeht die Datei mit dem Kommentar „Build 147“ (oder was auch immer die Build-Nummer zur Zeit ist). Die Datei nicht während der normalen Entwicklung begehen. Auf diese Weise können Sie leicht Karte zwischen Buildnummern und Versionen in Git.

In unserem Unternehmen zogen wir aus dem SVN auf Git. Fehlende Revisionsnummern war ein großes Problem!

Sie git svn clone und markiert dann die letzte SVN durch seine SVN-Revisionsnummer zu begehen:

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

Dann können Sie die Revisionsnummer mit Hilfe von

erhalten
git describe --tags --long

Dieser Befehl gibt so etwas wie:

7603-3-g7f4610d

Die Mittel: Der letzte Tag ist 7603 - es ist die SVN-Revision ist. 3 - ist Anzahl der Festschreibungen von ihm. Wir müssen sie hinzufügen.

So kann die Revisionsnummer von diesem Skript gezählt werden:

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

Die, die ich verwendet zu verwenden, war:

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

Einfach, aber es hat funktioniert.

Bash-Syntax,

$(git rev-list --count HEAD)

sucht nach rein lineare Geschichte in Ordnung. Wenn Sie auch manchmal wollen „Zahlen“ aus Zweigen (basierend off master) haben, betrachten:

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

Wenn Sie von einer Kasse von master laufen, erhalten Sie einfach 1234.0 oder dergleichen. Wenn aus einer Kasse eines Zweigs laufen Sie so etwas wie 1234.13 erhalten, wenn es 13 Commits auf diesem Zweig gemacht worden ist. Offensichtlich ist dies sinnvoll ist nur insoweit, als sie höchstens ein abzweigen einer bestimmten master Revision sind zu stützen.

--first-parent auf die Mikronummer hinzugefügt werden, könnten einige Commits nur aus der Verschmelzung anderen Branchen entstehen, zu unterdrücken, obwohl es wahrscheinlich nicht notwendig ist.

Sie können versuchen,

git log --oneline | wc -l

oder zur Liste alle von den Menschen getan Commits im Repository beitragen

git shortlog -s

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

Wenn Sie dies Ihre Konfiguration hinzugefügt haben, können Sie nur den Befehl verweisen;

git count

Mit git shortlog einfach so

git shortlog -sn

oder einen Aliasnamen erstellen (für ZSH Terminal)

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top