2010-02-19 35 views
211

He escrito un enganche Post-commit de Git y funciona correctamente. Sin embargo, quiero agregar este gancho para aplicar a todos los repositorios de git actuales (y futuros) en los que estoy trabajando. Traté de agregar el gancho a mi ~/.git/hooks/ en lugar de en el directorio de ganchos en el directorio del proyecto, sin embargo, esto no pareció funcionar.Git commit hooks: configuración global

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

+3

A partir de Git 2.9, este mejor enfoque ha cambiado: la respuesta de VonC es una mejor apuesta. http://stackoverflow.com/a/37293198/2741954 –

Respuesta

81

que quiere añadir este gancho para aplicarse a todos los repositorios Git actuales (y futuros) que estoy trabajando

con Git 2.9 + (junio de 2016), lo único que haría es:

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

Ver "change default git hooks": esto se ha hecho para administrar los ganchos centralizados.

+0

si tengo un repositorio existente y quiero que todos los demás desarrolladores que realicen cambios tengan un enlace de precompromiso actualizado, por ejemplo, ¿cómo haré esto? gracias – Richlewis

+0

@Richlewis ¿quiere decir que http://stackoverflow.com/a/40550555/6309 no estaba del todo claro? – VonC

+0

@Richlewis Debería configurar una carpeta compartida accesible para todos los desarrolladores, para que puedan hacer referencia en su propia configuración local. – VonC

67

Si los quieres en todas partes en su sistema (incluidos los usuarios, además de usted), puede modificar el contenido del directorio de plantillas instalado - los que están en $PREFIX/share/git-core/templates/hooks, donde $PREFIX es probablemente /usr/local o /usr.

Si desea que esto sea solo para usted, entonces sí, lo más simple sería la opción --template de git-init. Puede mantener fácilmente un directorio personal de plantillas que tenga enlaces simbólicos a la versión instalada de los valores predeterminados que desea conservar (anzuelos individuales, el directorio de información ...) y luego su propio contenido en hooks/post-commit y cualquier otra cosa que desee personalizar.

+11

Gracias, esto funcionó bien. Y para aplicarlo retroactivamente a mis proyectos existentes, acabo de ejecutar 'git init' nuevamente y agregué mi nuevo gancho. – swanson

+1

maravilloso consejo Jefromi, gracias grande! –

+0

Esta es una solución ordenada, pero requeriría que cambie todos sus repositorios. Esto es factible, pero ¿no hay alguna posibilidad con un complemento o algo así (así es como se hace en Bazar)? –

268

A partir de git 1.7.1, puede establecer init.templatedir en su gitconfig para indicarle a git dónde buscar plantillas.

Conjunto de esta manera:

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

Después, nuevos repositorios de crear o clon utilizará este directorio para las plantillas. Coloque los ganchos que desee en ~/.git_template/hooks. repositorios existentes se puede reinicializar con las plantillas adecuadas mediante la ejecución de git init en el mismo directorio en .git es.

Para las versiones Git mayores de 1.7.1, corriendo git init --template ~/.git_template funcionará si eres como yo y todavía quieren manejar su .git_template dir junto con el resto de tus archivos de puntos. También puede usar el entorno $GIT_TEMPLATE_DIR para indicar git init donde está el directorio de su plantilla.

+1

administrar git hooks con dotfiles es una gran idea. Gracias. –

+47

Gran respuesta. Si alguien más se pregunta si volver a ejecutar 'git init' en un repositorio existente lo borra - ** no **, consulte: http://stackoverflow.com/questions/5149694/does-running-git-init-twice -initialize-a-repository-or-reinitialize-an-existing – kontur

+0

Para mí, no funcionó con la ruta relativa a la carpeta de la plantilla de git para copiar archivos usando git init en los repositorios existentes. Yo había usado la ruta completa en su lugar. – user847988

3

Un enfoque minimalista es crear un directorio git_hooks/ en su repositorio para realizar un seguimiento de los ganchos que se escriben para ese proyecto, llevarlo a la atención de los usuarios futuros mencionándolo en un README, y confiar en ellos para hacer la derecha cosa después de que hayan clonado. He reflexionado sobre esto por un tiempo y elegí un enfoque incremental. Más adelante, podría considerar usar una herramienta como git-hooks.