Aplicar un gancho de confirmación posterior de git a todos los repositorios actuales y futuros

Resuelto swanson asked hace 14 años • 4 respuestas

Escribí un gancho posterior a la confirmación de Git y funciona correctamente. Sin embargo, quiero agregar este enlace para aplicarlo a todos los repositorios Git actuales (y futuros) en los que estoy trabajando. Intenté agregar el enlace a mi ~/.git/hooks/directorio en lugar de al directorio de enlaces en el directorio del proyecto, sin embargo, esto no pareció funcionar.

¿Existe alguna forma de crear enlaces Git globales que se apliquen a todos los repositorios de mi sistema (sin tener que copiarlos en cada directorio del proyecto)? Si no, ¿cuál sería la mejor solución en el futuro? ¿Quizás una plantilla git-init?

swanson avatar Feb 19 '10 08:02 swanson
Aceptado

A partir de Git 1.7.1, puedes configurar init.tempdedir en tu gitconfig para indicarle a Git dónde buscar plantillas.

Configúrelo así:

git config --global init.templatedir '~/.git_template'

Posteriormente, los nuevos repositorios que cree o clone utilizarán este directorio para las plantillas. Coloca los ganchos que quieras ~/.git_template/hooks. Los repositorios existentes se pueden reinicializar con las plantillas adecuadas ejecutándolos git initen el mismo directorio .giten el que se encuentran.

Para versiones de Git anteriores a 1.7.1, ejecutar git init --template ~/.git_templatefuncionará si eres como yo y aún deseas administrar tu .git_templatedirectorio junto con el resto de tus archivos dot. También puede utilizar el $GIT_TEMPLATE_DIRentorno para saber git initdónde está su directorio de plantillas.

sklnd avatar Jan 12 '2012 21:01 sklnd

Quiero agregar este enlace para aplicarlo a todos los repositorios de git actuales (y futuros) en los que estoy trabajando.

Con git 2.9+ (junio de 2016), todo lo que harías es:

git config --global core.hooksPath /path/to/my/centralized/hooks

Consulte " cambiar los ganchos de git predeterminados ": esto se ha hecho para administrar los ganchos centralizados.


Pero, como señaló Adam Lindberg en los comentarios :

¡Establecer una ruta de enlace global deshabilita todos los enlaces locales en sus repositorios!

Dependiendo de su caso de uso, ese puede ser el objetivo, si lo desea, como dice el OP, "crear enlaces Git globales que se aplicarán a todos los repositorios de mi sistema (sin tener que copiarlos en cada directorio de proyecto)".

Pero si no eres consciente de ese efecto secundario y aún deseas conservar algunos enlaces locales... esos se ignorarán cuando core.hooksPathse establezcan.

VonC avatar May 18 '2016 07:05 VonC

Si los desea en todas partes de su sistema (incluidos los usuarios además de usted), puede modificar el contenido del directorio de plantillas instalado: están en $PREFIX/share/git-core/templates/hooks, donde $PREFIXprobablemente esté /usr/localo /usr.

Si quieres que esto sea sólo para ti, entonces sí, lo más sencillo sería la --templateopción de git-init. Puede mantener fácilmente un directorio de plantilla personal que tenga enlaces simbólicos a la versión instalada de los valores predeterminados que desea conservar (enlaces individuales, el directorio de información...) y luego su propio contenido hooks/post-commity cualquier otra cosa que desee personalizar.

Cascabel avatar Feb 19 '2010 01:02 Cascabel

Un enfoque minimalista es crear un git_hooks/directorio en su repositorio para rastrear los enlaces que escribe para ese proyecto, llamar la atención de futuros usuarios mencionándolos en un archivo READMEy confiar en que harán lo correcto después de haber clonado. He reflexionado sobre esto durante un tiempo y elegí un enfoque incremental. En el futuro, podría considerar usar una herramienta como git-hooks .

Neil Best avatar Jun 01 '2012 20:06 Neil Best