2777 Stimmen

Wie kann man den Hash für den aktuellen Commit in Git abrufen?

Ich möchte (vorerst) die Möglichkeit beibehalten, Git-Änderungssätze mit in TFS gespeicherten Workitems zu verknüpfen.

Ich habe bereits ein Tool geschrieben (mit einem Hook von Git), mit dem ich Workitem-Identifikatoren in die Nachricht eines Git Changesets einfügen kann.

Außerdem möchte ich den Hash der Git-Übertragung in einem benutzerdefinierten TFS-Workitem-Feld speichern. Auf diese Weise kann ich ein Workitem in TFS untersuchen und sehen, welche Git-Änderungssätze mit dem Workitem verbunden sind.

Wie kann ich den Hash des aktuellen Commits von Git einfach abrufen?

3 Stimmen

Verwenden Sie git log um die letzten Übertragungen abzurufen, die den vollständigen Übertragungshash anzeigen

95voto

Deestan Punkte 15779

Der Vollständigkeit halber, da es noch niemand vorgeschlagen hat. .git/refs/heads/master ist eine Datei, die nur eine Zeile enthält: den Hash der letzten Übertragung auf master . Sie können ihn also einfach von dort aus lesen.

Oder, als Befehl:

cat .git/refs/heads/master

更新しました。

Beachten Sie, dass Git nun die Speicherung einiger Head-Refs in der pack-ref-Datei unterstützt, anstatt als Datei im Ordner /refs/heads/. https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html

63voto

John Tyree Punkte 1032

Es gibt immer git describe auch. Standardmäßig gibt er Ihnen --

john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75

43voto

Robert Munteanu Punkte 64955

Verwenden Sie git rev-list --max-count=1 HEAD

35voto

Henk Punkte 516

Wenn Sie den Hash während eines Skripts in einer Variablen speichern müssen, können Sie

last_commit=$(git rev-parse HEAD);

Oder, wenn Sie nur die ersten 10 Zeichen benötigen (wie bei github.com)

last_commit=$(git rev-parse --short=10 HEAD);

25voto

Fordi Punkte 2630

Wenn Sie es ganz genau wissen wollen:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

Grundsätzlich speichert Git den Speicherort von HEAD in .git/HEAD, in der Form ref: {path from .git} . Dieser Befehl liest die Datei aus, schneidet das "ref: " ab und liest die Datei aus, auf die es zeigt.

Das wird natürlich im detached-head-Modus scheitern, da HEAD nicht "ref:..." sein wird, sondern der Hash selbst - aber wissen Sie, ich glaube nicht, dass Sie so viel Klugheit in Ihren Bash-Einzeilern erwarten. Wenn Sie allerdings nicht glauben, dass Semikolons Betrug sind...

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

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