Git
Ganchos del lado del cliente Git
Buscar..
Introducción
Al igual que muchos otros sistemas de control de versiones, Git tiene una forma de activar scripts personalizados cuando ocurren ciertas acciones importantes. Hay dos grupos de estos enlaces: del lado del cliente y del lado del servidor. Los enganches del lado del cliente se activan mediante operaciones como la confirmación y la fusión, mientras que los enganches del lado del servidor se ejecutan en operaciones de red como la recepción de confirmaciones forzadas. Puede utilizar estos ganchos por todo tipo de razones.
Instalación de un gancho
Todos los ganchos se almacenan en el subdirectorio de hooks
directorio Git. En la mayoría de los proyectos, eso es .git/hooks
.
Para habilitar un script de enganche, coloque un archivo en el subdirectorio de hooks
de su directorio .git
que tenga el nombre apropiado (sin ninguna extensión) y sea ejecutable.
Gancho de pre-empuje Git
El script pre-push es llamado por git push
después de que haya verificado el estado remoto, pero antes de que se haya enviado algo. Si este script sale con un estado distinto de cero, no se enviará nada.
Este gancho se llama con los siguientes parámetros:
$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)
La información sobre las confirmaciones que se están enviando se proporciona como líneas a la entrada estándar en el formulario:
<local_ref> <local_sha1> <remote_ref> <remote_sha1>
Valores de muestra:
local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f
A continuación, el ejemplo de script pre-push se tomó de pre-push.sample predeterminado que se creó automáticamente cuando se inicializa un nuevo repositorio 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