Wie erhalte ich die Commit-ID des Head of Master in Git?

Lesezeit: 3 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
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

Benutzer-Avatar
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.

1312370cookie-checkWie erhalte ich die Commit-ID des Head of Master in Git?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy