Escribí mi propio gancho posterior a la fusión personalizado, ahora agregué un directorio "hooks" 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 hooks a .git / hooks para no tener que copiar el archivo de una carpeta a otra cada vez que alguien lo cambia, así que intenté:
ln -s -f hooks/post-merge .git/hooks/post-merge
Pero no parece funcionar, ¿alguna idea de por qué? "ln hooks / post-merge .git / hooks / post-merge" funciona bien, pero hacer un enlace duro es lo mismo que copiar, supongo ...
.git/hooks/
que apuntahooks/post-merge
a.git/hooks/hooks/post-merge
, que no existe. Quieresln -s -f ../../hooks/post-merge .git/hooks/post-merge
. O hacer su vida más fácil:ln -s -f ../hooks .git/hooks
. Tu problema no tiene nada que ver con git..git/hooks
.Respuestas:
acabas de utilizar un camino incorrecto, debería ser:
fuente
cd
entrado. ¿No debería ser asíln -s ./hooks/
?.git/hooks
como su directorio de trabajo, por lo que las rutas relativas deben ser relativas a ese directorio. Esto se explica más por sí mismo si primerocd
ingresa.git/hooks
antes de hacer el enlace simbólico y averigua la ruta relativa desde allí.ln
se almacenará como destino y se resolverá en relación con la ubicación del enlace.cd
ingresar.git/hooks
antes de hacer el enlace lo ayudará a escribir el comando, ya que luego puede autocompletar en la ruta correcta.prepare-commit-msg
. El problema es que si estoy editando el mensaje de confirmación usando nano, luego Ctl + X para abortar, git aún completa una confirmación de todos modos en lugar de abortar como solía hacer antes de hacer este cambio. ¿Hay alguna manera de tener una salida nano sin que se complete este compromiso?Si bien puede usar enlaces simbólicos, también puede cambiar la carpeta de ganchos para su proyecto en su configuración de git con:
Que es local de forma predeterminada, por lo que no arruinará los ganchos de git para sus otros proyectos. Funciona para todos los enganches de este repositorio, por lo que es especialmente útil si tiene más de un gancho.
Si ya tiene ganchos personalizados
.git/hooks/
que no desea compartir con su equipo, puede agregarlos en ganchos / y agregar un.gitignore
para que no se compartan.fuente
Cambiar de directorio antes de vincular
fuente
cd
:ln -s -f ../../hooks/post-merge
El cálculo de la ruta se realiza en relación con el enlace simbólico. Entendamos usando un ejemplo,
ln -s path/to/file symlink/file
Aquí, la ruta al archivo debería ser la ruta relativa desde la ruta del enlace simbólico.
El sistema realmente calcula la ruta del archivo como
symlink/path/path/to/file
El comando anterior debe reescribirse como
ln -s ../path/to/file symlink/path
La estructura de la carpeta es,
fuente
Utilizando el comentario de Michael Cihar, aquí hay un ejemplo de un script bash que escribí para crear simplemente estos enlaces simbólicos. Este script se encuentra en git_hooks / dir, que está en la raíz del proyecto. Mi carpeta .git / también está en el mismo nivel de directorio.
Mi script debe ejecutarse desde el directorio git_hooks / real. Puede modificarlo para que se comporte de manera diferente, si lo desea.
Este script enlazará simbólicamente cualquier archivo que no tenga el sufijo de una extensión de archivo dentro del directorio git_hooks /. Tengo un README.txt en este directorio + este script (llamado symlink.sh). Todos los ganchos de git reales se denominan 'pre-commit', 'pre-push', etc., por lo que estarán vinculados simbólicamente.
fuente
por qué no simplemente cp ./hooks/* .git / hooks /
esto funcionó para mí en Mac OS
fuente
I don't have to copy the file from one folder to the other every time someone changes