Ich möchte die Git-Commit-ID (dh SHA) des Head of Master auf meiner Website als Kennung anzeigen.
Wie kann ich diese Informationen aus Git ziehen?
Blankmann
Ich möchte die Git-Commit-ID (dh SHA) des Head of Master auf meiner Website als Kennung anzeigen.
Wie kann ich diese Informationen aus Git ziehen?
Alan Haggai Alavi
Mit diesem Befehl erhalten Sie den SHA-1 des letzten Commits
git rev-parse HEAD
+1: Ich denke, dieser “Sanitär” -Ansatz ist besser für eine skriptbasierte Lösung, wie vom OP gefordert, als mein “Porzellan” -Ansatz, den ich unten vorschlage (dh “git log ...
“).
– Jette
17. Februar 2011 um 22:11 Uhr
So erhalten Sie den SHA-1 des neuesten Commits aktiviert Meister Zweig
– Andy
29. August 2016 um 6:55 Uhr
Andy: git rev-parse master
wird Ihnen das Ergebnis liefern.
– Alan Haggai Alavi
30. August 2016 um 1:10 Uhr
@AlanHaggaiAlavi dies funktioniert im lokalen Git-Repo, was in einem Repo verwendet werden sollte, das von einem Remote-Server wie GitHub geklont wird
– Kasun Siyambalapitiya
28. November 2016 um 10:14 Uhr
Kasun Siyambalapitiya: Dies sollte auf jedem Git-Repository funktionieren. Du könntest benutzen git rev-parse master
oder git rev-parse origin/master
oder einen beliebigen anderen Referenznamen, dessen Commit-ID Sie benötigen.
– Alan Haggai Alavi
28. November 2016 um 22:15 Uhr
VonC
Anstelle des HEAD SHA1 würde ich lieber mitfahren git describe
, als besser lesbarer Weg, um eine “Build-ID” zu erhalten. Zum Beispiel:
git describe --abbrev=4 HEAD
Wenn Sie sich nicht für Tags interessieren, und wenn Sie das bedenken git describe
ist ein Porzellan Befehldie nicht in einem Skript verwendet werden sollte, dann ja, git rev-parse
(a Sanitär-Befehl) ist besser geeignet.
Aber noch einmal, wenn Sie einen SHA1 auf Ihrer Website als ID anzeigen möchten, würde ich gehen mit:
git rev-parse --short HEAD
(Um nur die ersten 7 Ziffern des SHA1 anzuzeigen)
git rev-parse HEAD
(also alle 40 Ziffern) ist immer noch nützlich, wenn Sie überprüfen möchten, ob das, was Sie gerade bereitgestellt haben, tatsächlich was ist HEAD
bezieht sich auf.
Siehe zum Beispiel dies Bereitstellungsskript:
Es löst zunächst ein Update aus:
#If requested, perform update before gathering information from repos.
if $update; then
echo "Updating fred-official."
cd "$fredDir"
git_update
if ! [[ "$forceFredID" = "" ]]
then
checkGitID "$forceFredID"
fi
echo "Updating website repo."
cd "$websiteDir"
git_update
if ! [[ "$forceWebsiteID" = "" ]]
then
checkGitID "$forceWebsiteID"
fi
cd "$startingDir"
fi
Das Update selbst aktualisiert den Inhalt der Website:
# Discard any local changes, update remote branches and tags, and
# check out to the latest master branch.
git_update() {
#To update tags and branches.
git remote update
git clean -dfx
git reset --hard origin/master
}
Und dann nutzt es git rev-parse HEAD
um zu überprüfen, was gerade ausgecheckt wurde:
function checkGitID {
checkID=$1
echo Checking git ID is "$checkID"
if ! git checkout "$checkID"
then
echo Failed to checkout "$checkID"
exit 4
fi
if ! actualID=$(git rev-parse --verify HEAD)
then
echo Failed to verify "$checkID"
git checkout master
exit 5
fi
if ! [[ "$actualID" = "$checkID" ]]
then
echo Git verification failed, something very bad is happening
exit 6
fi
echo Git ID verified: "$checkID"
}
Der folgende Befehl gibt den SHA-1 von HEAD zurück:
git log -1 --pretty="%H"
Gerade leicht weniger elegant:
git log | head -1 | sed s/'commit '//
Sie können Folgendes verwenden:
git describe --always --dirty
--dirty[=<mark>], --broken[=<mark>]
Describe the state of the working tree. When the working tree matches HEAD, the output is the same
as "git describe HEAD". If the working tree has local modification "-dirty" is appended to it. If a
repository is corrupt and Git cannot determine if there is local modification, Git will error out,
unless ‘--broken’ is given, which appends the suffix "-broken" instead.
--all
Instead of using only the annotated tags, use any ref found in refs/ namespace. This option enables
matching any known branch, remote-tracking branch, or lightweight tag.