web-dev-qa-db-fra.com

Comment obtenir l'identifiant de commit du chef de maître dans git?

Je souhaite afficher l'identifiant de validation git (c'est-à-dire SHA) du responsable de la gestion principale sur mon site Web.

Comment puis-je extraire cette information de git?

41
Blankman

git rev-parse HEAD vous obtiendrez le dernier SHA-1 du commit.

63
Alan Haggai Alavi

Au lieu du HEAD SHA1, je préférerais utiliser git describe, comme moyen plus lisible d'obtenir un "identifiant de construction". Par exemple:

git describe --abbrev=4 HEAD

Si vous ne vous souciez pas des balises, et considérant que git describe est une commande porcelaine, qui ne devrait pas être utilisée dans un script, alors oui, git rev-parse (une commande de plomberie) est plus approprié.

Mais encore une fois, si vous voulez afficher un SHA1 sur votre site Web en tant qu'identifiant, j'irais avec:

git rev-parse --short HEAD

(Pour afficher uniquement les 7 premiers chiffres du SHA1)


git rev-parse HEAD (les 40 chiffres) est toujours utile lorsque vous voulez vérifier si ce que vous venez de déployer correspond bien à ce que HEAD fait référence.
Voir par exemple ce script de déploiement :

Cela déclenche d'abord une mise à jour:

#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

La mise à jour elle-même actualise le contenu du site:

# 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
}

Et puis, il utilise git rev-parse HEAD pour vérifier ce qui vient d’être extrait:

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"
}
26
VonC

La commande suivante renverra le SHA-1 de HEAD:

git log -1 --pretty="%H"
17
Jeet

Juste légèrement moins élégant:

git log | head -1 | sed s/'commit '//

3
Lars

Vous pouvez utiliser:

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.
0
Jintao Zhang