Recherche…


Introduction

Comme beaucoup d'autres systèmes de contrôle de version, Git permet de lancer des scripts personnalisés lorsque certaines actions importantes se produisent. Il existe deux groupes de ces points d'ancrage: côté client et côté serveur. Les hooks côté client sont déclenchés par des opérations telles que la validation et la fusion, tandis que les hooks côté serveur s'exécutent sur des opérations réseau telles que la réception de commits poussés. Vous pouvez utiliser ces crochets pour toutes sortes de raisons.

Installation d'un crochet

Les hooks sont tous stockés dans le sous-répertoire hooks répertoire Git. Dans la plupart des projets, il s'agit de .git/hooks .

Pour activer un script de hook, placez un fichier dans le sous-répertoire hooks de votre répertoire .git nommé de manière appropriée (sans aucune extension) et exécutable.

Git pre-push hook

Le script pre-push est appelé par git push après avoir vérifié l'état de la télécommande, mais avant que rien n'ait été poussé. Si ce script se termine avec un statut non nul, rien ne sera poussé.

Ce hook est appelé avec les paramètres suivants:

 $1 -- Name of the remote to which the push is being done (Ex: origin)
 $2 -- URL to which the push is being done (Ex: https://<host>:<port>/<username>/<project_name>.git)

Les informations sur les commits en cours sont fournies sous forme de lignes à l'entrée standard sous la forme:

<local_ref> <local_sha1> <remote_ref> <remote_sha1>

Valeurs d'échantillon:

local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f

Dans l'exemple ci-dessous, un script pré-push a été extrait de pre-push.sample par défaut qui a été automatiquement créé lors de l'initialisation d'un nouveau référentiel avec git init

# This sample shows how to prevent push of commits where the log message starts
# with "WIP" (work in progress).

remote="$1"
url="$2"

z40=0000000000000000000000000000000000000000

while read local_ref local_sha remote_ref remote_sha
do
    if [ "$local_sha" = $z40 ]
    then
        # Handle delete
        :
    else
        if [ "$remote_sha" = $z40 ]
        then
            # New branch, examine all commits
            range="$local_sha"
        else
            # Update to existing branch, examine new commits
            range="$remote_sha..$local_sha"
        fi

        # Check for WIP commit
        commit=`git rev-list -n 1 --grep '^WIP' "$range"`
        if [ -n "$commit" ]
        then
            echo >&2 "Found WIP commit in $local_ref, not pushing"
            exit 1
        fi
    fi
done

exit 0


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow