Ricerca…


introduzione

Come molti altri sistemi di controllo della versione, Git ha un modo per attivare script personalizzati quando si verificano determinate azioni importanti. Esistono due gruppi di questi hook: lato client e lato server. Gli hook lato client vengono attivati ​​da operazioni come commit e merging, mentre i hook sul lato server vengono eseguiti su operazioni di rete come la ricezione di commit push. Puoi usare questi ganci per tutti i tipi di motivi.

Installazione di un gancio

I ganci sono tutti memorizzati nella sottodirectory hooks directory Git. Nella maggior parte dei progetti, è .git/hooks .

Per abilitare uno script di hook, inserisci un file nella sottodirectory hooks della tua directory .git che è chiamata appropriatamente (senza alcuna estensione) ed è eseguibile.

Gancio pre-push

Lo script pre-push viene chiamato da git push dopo che ha controllato lo stato remoto, ma prima che qualcosa sia stato premuto. Se questo script termina con uno stato diverso da zero, nulla verrà spinto.

Questo hook è chiamato con i seguenti parametri:

 $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)

Le informazioni sui commit che vengono inviati vengono fornite come linee per l'input standard nel modulo:

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

Valori del campione:

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

Sotto lo script di pre-push di esempio è stato preso dal pre-push.sample predefinito che è stato creato automaticamente quando un nuovo repository è inizializzato con 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow