Git
Git Gancio lato client
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