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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow