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

9voto

Dennis Punkte 51330
git show-ref --head --hash head

Wenn es Ihnen aber um Geschwindigkeit geht, der von Deestan erwähnte Ansatz

cat .git/refs/heads/<branch-name>

ist deutlich schneller als alle anderen hier aufgeführten Methoden.

7voto

Batty Punkte 111

Führen Sie unter git bash einfach $ git log -1

werden Sie diese Zeilen nach Ihrem Befehl sehen.

commit d25c95d88a5e8b7e15ba6c925a1631a5357095db .. (info about your head)

d25c95d88a5e8b7e15ba6c925a1631a5357095db, is your SHA for last commit.

7voto

jo_ Punkte 6368

In Ihrem Home-Verzeichnis in der Datei ".gitconfig" Folgendes hinzufügen

[alias]
sha = rev-parse HEAD

dann haben Sie einen Befehl, den Sie sich leichter merken können:

$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600

4voto

leenremm Punkte 536

Hübscher Ausdruck des Haupt-Git-Repo und der Unter-Module:

echo "Main GIT repo:"
echo $(git show -s --format=%H) '(main)'
echo "Sub-modules:"
git submodule status | awk '{print $1,$2}'

Beispielhafte Ausgabe:

3a032b0992d7786b00a8822bbcbf192326160cf9 (main)
7de695d58f427c0887b094271ba1ae77a439084f sub-module-1
58f427c0887b01ba1ae77a439084947de695d27f sub-module-2
d58f427c0887de6957b09439084f4271ba1ae77a sub-module-3

2voto

Daniel Alder Punkte 4595

Hier ist eine weitere Implementierung des Direktzugriffs:

head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(cat ".git/${head#ref: }")"
done

Dies funktioniert auch über http, was für lokale Paketarchive nützlich ist (ich weiß: für öffentliche Websites ist es nicht empfehlenswert, das .git-Verzeichnis zugänglich zu machen):

head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(curl -s "$baseurl/.git/${head#ref: }")"
done

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