Necesito ayuda con un script Bash que agregará automáticamente el nombre de la rama de git como un hash en los mensajes de confirmación.
git
bash
git-branch
Tomer Lichtash
fuente
fuente
git branch | grep ...
para obtener la rama actual es la forma incorrecta de hacer esto. Consideregit symbolic-ref -q HEAD
(como se muestra en esta respuesta ) ogit rev-parse --abbrev-ref HEAD
. El comando symbolic-ref fallará si está en un HEAD separado, así que si desea detectar ese caso, úselo. De lo contrario, el método rev-parse --abbrev-ref es probablemente el mejor.Respuestas:
Utilice
prepare-commit-msg
ocommit-msg
githook .Ya hay ejemplos en su
PROJECT/.git/hooks/
directorio.Como medida de seguridad, tendrá que habilitar manualmente dicho gancho en cada repositorio que desee utilizar. Sin embargo, puede enviar el script y copiarlo en todos los clones en el
.git/hooks/
directorio.fuente
.git/hooks/prepare-commit-msg.sample
. =) Todo lo que necesita modificar (después de seguir las instrucciones en los comentarios) es copiar y pegar cualquier solución de stackoverflow.com/questions/1593051/… que.git/hooks/prepare-commit-msg.sample
contiene tres ejemplos. Uno para comentar la sección de conflictos, agregargit diff --name-status -r
resultados y agregar líneas firmadas por ... No se agrega el nombre de la rama al mensaje de confirmación. Así que me vi obligado a escribir mi propio gancho.you will have to manually enable such a hook on each repository you wish to use it
Significa esto que debe otorgar permisos de ejecución al ARCHIVO? Si es así, ¿puedo editar la respuesta para incluirla (o usted, por favor)?Aquí está mi
commit-msg
guión como ejemplo:Crea el siguiente mensaje de confirmación:
Estoy usando el número de problema
branch_name
, ya que la descripción del problema se coloca en el comandobranch_description
usinggit branch --edit-description [branch_name]
.Puede encontrar más información sobre las descripciones de las sucursales en esta sección de preguntas y respuestas .
El ejemplo de código se almacena en el siguiente Gist .
fuente
echo $NAME: "$(cat $1)" > $1
. Esto funciona porque la razón por la que se perdieron las nuevas líneas es que echo estaba tratando cada línea de$(cat "$1")
como un nuevo argumento y haciendo eco de cada una con un espacio entre ellas. Al rodear$(cat "$1")
con comillas dobles, echo trata la salida del gato como un solo argumento. Además, no creo que sea necesario citar$1
ya que su valor es.git/COMMIT_EDITMSG
Un script un poco más simple que agrega el nombre de la rama al mensaje de confirmación antes de editarlo. Entonces, si desea cambiarlo o eliminarlo, puede hacerlo.
Cree este archivo .git / hooks / prepare-commit-msg :
fuente
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
al usar esto.sed -i '.bak' "1s/^/$branchName : \n/" $1
@
comosed
separador en lugar de,/
ya que es más probable que aparezcan barras diagonales en el nombre de la rama o en el mensaje de confirmación, arruinandosed
.Puede hacerlo con una combinación de los ganchos prepare-commit-msg y pre-commit.
.git / hooks / prepare-commit-msg
.git / hooks / pre-commit
Establecer permisos
fuente
--amend
por ejemplo. En lugar de usarecho
, debería usarsed
en su lugar. Aquí está en una sola línea:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1
agregue el siguiente código en el archivo prepare-commit-msg.
Agregará el nombre de la rama para confirmar el mensaje, excepto merge-commit. El merge-commit tiene información de rama por defecto, por lo que un nombre de rama adicional es innecesario y hace que el mensaje sea feo.
fuente
Inspirado por la respuesta de Tim que se basa en la respuesta principal, resulta que el gancho prepare-commit-msg toma como argumento qué tipo de compromiso está ocurriendo . Como se ve en el prepare-commit-msg predeterminado, si $ 2 es 'fusionar', entonces es una confirmación de fusión. Por lo tanto, el cambio de mayúsculas y minúsculas se puede modificar para incluir la función addBranchName () de Tim.
He incluido mi propia preferencia sobre cómo agregar el nombre de la rama y todas las partes sin comentarios del
prepare-commit-msg.sample
gancho predeterminado .fuente
Si desea hacerlo global (para todos los proyectos):
Cree un
git-msg
archivo con el contenido de la respuesta de shytikov y colóquelo en alguna carpeta:Ahora habilite los ganchos:
y
git init
nuevamente en cada proyecto que desee utilizar.fuente
Estaba teniendo problemas para que estas soluciones funcionen en MacOS debido al hecho de que usa BSD en
sed
lugar de GNUsed
. Sin embargo, logré crear un script simple que hace el trabajo. Todavía usando.git/hooks/pre-commit
:Esto supone un estándar de nomenclatura de ramas similar a
functional-desc_JIRA-NUMBER
. Si el nombre de su sucursal es solo su número de boleto de Jira, simplemente puede deshacerse de todo, desde la tubería hasta el f2. También requiere que tenga un archivo con nombre.gitmessage
en su directorio personal.fuente
En caso de que desee que el ticket JIRA se agregue al mensaje de confirmación, utilice el siguiente script.
Confirme un mensaje como
PROJECT-2313: Add awesome feature
Esto requiere que el nombre de su sucursal comience con el Ticket de jira.Esta es una combinación de estas soluciones:
Está modificado para OS X, con el
sed -i '.bak'
y funciona también desde SourceTree.https://gist.github.com/georgescumihai/c368e199a9455807b9fbd66f44160095
fuente