Aplicar un gancho de confirmación posterior de git a todos los repositorios actuales y futuros
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?
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 init
en el mismo directorio .git
en el que se encuentran.
Para versiones de Git anteriores a 1.7.1, ejecutar git init --template ~/.git_template
funcionará si eres como yo y aún deseas administrar tu .git_template
directorio junto con el resto de tus archivos dot. También puede utilizar el $GIT_TEMPLATE_DIR
entorno para saber git init
dónde está su directorio de plantillas.
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.hooksPath
se establezcan.
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 $PREFIX
probablemente esté /usr/local
o /usr
.
Si quieres que esto sea sólo para ti, entonces sí, lo más sencillo sería la --template
opció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-commit
y cualquier otra cosa que desee personalizar.
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 README
y 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 .