2010-11-03 10 views
14

Tengo una plantilla de confirmación configurada para git, y me gustaría incluir el nombre de la rama actual en ella. Por lo general definido la rama a ser el ID del error, y me ayudaría con rellenar repetitivo, tales como:Incluyendo el nombre de la rama actual en la plantilla de confirmación

Bug : $BUG 

¿Cómo puedo realizar un cambio de este tipo con la plantilla comentario GIT?

+0

Oh, leyó mal que SRY :(También podemos establecer un alias para git commit, que primero encuentra la rama actual, la escribe en un archivo temporal y llama a la confirmación de git con el parámetro --template. – ZeissS

Respuesta

15

Probablemente usaría el gancho prepare-commit-msg para agregar eso al archivo. Desde la página de manual (vinculada):

Este enganche se invoca mediante la confirmación de git justo después de preparar el mensaje de registro predeterminado, y antes de que se inicie el editor.

Toma de uno a tres parámetros. El primero es el nombre del archivo que contiene el mensaje de registro de confirmación. El segundo es el origen del mensaje de confirmación ... [mensaje, plantilla, combinación, squash o confirmación] ...

Si el estado de salida es distinto de cero, la confirmación de git abortará.

El propósito del gancho es editar el archivo de mensajes en su lugar ...

Usted puede obtener la rama actual con git symbolic-ref HEAD.

Podría omitir las plantillas por completo, y hacer que el gancho preceda/inserte/agregue el nombre de la rama. Caso más simple, anexando, el script es solo una línea de shebang, luego git symbolic-ref HEAD >> "$1". Use su método favorito si desea incrustarlo: más legible para mover el original, escribir y anexar, pero el método vinculado en los comentarios ciertamente también funciona.

Si prefiere usar una plantilla con marcadores de posición, puede hacer algo como sed -i "s/Bug : \$BUG/BUG : $(git symbolic-ref HEAD)/" "$1". Estoy seguro de que puedes imaginar muchas otras variaciones.

Es posible que desee suprimir este comportamiento para algunos de los tipos de confirmaciones (ese segundo argumento) o incluso solo activarlo si el segundo argumento es "plantilla", si está utilizando el enfoque de sustitución repetitivo.

+0

Gracias por la respuesta, es perfecta. Como referencia, pude anteponer la línea con instrucciones de http : //stackoverflow.com/questions/54365/prepend-to-a-file-one-liner-shell –

+0

@Robert Munteanu en caso de que quiera poner toda su solución aquí en una respuesta, para laz y? Me gustaría votarlo con seguridad :) Gracias ... –

+1

@Yar: Personalmente, prefiero tener algo legible con un archivo temporal que algún descriptor de archivo mágico que tengo que tratar de descifrar más tarde. 'mv" $ 1 "" $ 1.tmp "; git symbolic-ref 2>/dev/null> "$ 1"; gato "$ 1.tmp" >> "$ 1"; rm "$ 1.tmp "' – Cascabel

0

Solo juntando los comentarios de la respuesta de Jefromi, termino con algo como esto. Sin duda, que podría ser más ajustado (si sabía lo que estaba haciendo):

tempFile='/tmp/git-commit-template' 
git config commit.template "$tempFile" 
rm $tempFile 
branch=$(git symbolic-ref HEAD|sed s#refs/heads/##) exec 3<> "$tempFile" && awk -v TEXT="[$branch]" 'BEGIN {print TEXT}{print}' "$tempFile" >&3 
git add . 
git commit -a 
1

Una solución usando alias git, pero ninguna plantilla:

$ git config --global alias.com '!sh -c "bug=`git symbolic-ref HEAD|sed s#refs/heads/##`; git commit -em \"BUG: \${bug}\""' 
$ git com 
Cuestiones relacionadas