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-msgocommit-msggithook .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.samplecontiene tres ejemplos. Uno para comentar la sección de conflictos, agregargit diff --name-status -rresultados 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 itSignifica 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-msgguió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_descriptionusinggit 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$1ya que su valor es.git/COMMIT_EDITMSGUn 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@comosedseparador 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
--amendpor ejemplo. En lugar de usarecho, debería usarseden su lugar. Aquí está en una sola línea:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1agregue 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.samplegancho predeterminado .fuente
Si desea hacerlo global (para todos los proyectos):
Cree un
git-msgarchivo con el contenido de la respuesta de shytikov y colóquelo en alguna carpeta:Ahora habilite los ganchos:
y
git initnuevamente 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
sedlugar 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.gitmessageen 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 featureEsto 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