2011-01-04 22 views
54

Escribí mi propio gancho post-fusión personalizado, ahora agregué un directorio de "ganchos" a la carpeta principal de mi proyecto (ya que git no rastrea los cambios en .git/hooks), en algún lugar leí que puedo hacer un enlace simbólico desde ganchos para .git/ganchos así que no tengo que copiar el archivo de una carpeta a la otra cada vez que alguien lo cambia por lo que intentó:Enlace simbólico a un gancho en git

ln -s -f hooks/post-merge .git/hooks/post-merge

Pero no parece funcionar, ¿alguna idea de por qué? "Ganchos ln/post-fusión .git/ganchos/post-fusión" funciona bien, pero haciendo un enlace duro es el mismo que copyin supongo ....

+15

Porque el enlace simbólico se resuelve en relación con su ubicación. Un enlace simbólico en '.git/hooks /' que apunta a 'hooks/post-merge' se resuelve en' .git/hooks/hooks/post-merge', que no existe. Desea 'ln -s -f ../../hooks/post-merge .git/hooks/post-merge'. O haz tu vida más fácil: 'ln -s -f ../hooks .git/hooks'. Tu problema no tiene nada que ver con git. –

+1

http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository y http://stackoverflow.com/questions/427207/can-git-hook-scripts-be-managed-along-with -the-repository (y http://stackoverflow.com/questions/3703159/git-remote-shared-pre-commit-hook) señalan el hecho de que el enlace simbólico puede funcionar. – VonC

Respuesta

123

que acaba de utilizar un camino equivocado, que debe ser:

ln -s -f ../../hooks/post-merge .git/hooks/post-merge 
+7

No entiendo por qué necesito subir dos directorios para vincular un recurso que vive en la carpeta en la que he 'cd''ddo. ¿No debería ser simplemente 'ln -s./Hooks /'? – Droogans

+27

Esto. Cuando git está evaluando el enlace simbólico, aparentemente lo hace usando '.git/hooks' como su directorio de trabajo, por lo que las rutas relativas deben ser relativas a ese directorio. Esto es más fácil de entender si primero 'cd' en' .git/hooks' antes de hacer el enlace simbólico, y averiguar la ruta relativa desde allí. – Eliot

+10

@Eliot ni el directorio de trabajo afecta la creación ni la resolución de los enlaces simbólicos. Lo que sea que le dé 'ln' se almacenará como el objetivo y se resolverá en relación con la ubicación del enlace. –

2

Cambio de directorio antes de enlazar

cd /path/to/project-repo/.git/hooks 
ln -s -f ../../hooks/post-merge ./post-merge 
1

por qué no sólo cp ./hooks/* .git/ganchos/

esto funcionó para mi en Mac OS

+6

Porque 'No tengo que copiar el archivo de una carpeta a la otra cada vez que alguien cambia' –

Cuestiones relacionadas