Descubra el compromiso combinado en el gancho prepare-commit-msg

Descubra el compromiso combinado en el gancho prepare-commit-msg

Intenté crear un prepare-commit-msggancho que funcione para confirmaciones de fusión. Al script se le pasan los siguientes argumentos .git/MERGE_MSG, merge.

Necesito obtener el hash o el nombre de la rama de la confirmación fusionada (para una fusión normal, sin pulpo). Sé que puedo hacer git rev-parse MERGE_HEADpara obtener el hash o name-rev --name-only MERGE_HEADel nombre de la rama (si corresponde).

Sin embargo, parece que prepare-commit-msgse llama antes de que se cree MERGE_HEAD. ¿Existe alguna otra forma de saber qué confirmación se fusionó sin analizar el mensaje generado automáticamente?

Estoy usando git 2.4.0.

Respuesta1

En un controlador de fusión personalizado, el nombre de la rama que se fusiona (destino) se puede recuperar git symbolic-ref HEAD y el nombre de la rama que se fusiona (fuente) de la GITHEAD_<SHA>variable de entorno,

Este es un fragmento de script de ejemplo:

# retrieve merged branch name from an env var GITHEAD_<sha>=<branchName> 
# we cannot use a sym ref of MERGE_HEAD, as it doesn't yet exist 
gitHead=$(env | grep GITHEAD) # e.g. GITHEAD_<sha>=release/1.43 
# cut out everything up to the last "=" sign 
source="${gitHead##*=}"

# retrieve base branch name from a sym ref of HEAD 
branch=$(git symbolic-ref HEAD) # e.g. refs/heads/master 
# cut out "refs/heads"
destination="${branch#refs/heads/}"

echo "Merging from $source into $destination"

Fuente :¿Cómo recuperar nombres de sucursales en un controlador de combinación Git personalizado?.

información relacionada