J'ai écrit mon propre hook post-merge personnalisé, maintenant j'ai ajouté un répertoire "hooks" à mon dossier principal de projet (puisque git ne suit pas les changements dans .git / hooks), quelque part j'ai lu que je peux créer un lien symbolique à partir de hooks en .git / hooks pour ne pas avoir à copier le fichier d'un dossier à l'autre chaque fois que quelqu'un le modifie, alors j'ai essayé:
ln -s -f hooks/post-merge .git/hooks/post-merge
Mais cela ne semble pas fonctionner, des idées pourquoi? "ln hooks / post-merge .git / hooks / post-merge" fonctionne très bien mais créer un lien physique est le même que copier je suppose ...
.git/hooks/
qui pointe vershooks/post-merge
est résolu.git/hooks/hooks/post-merge
, ce qui n'existe pas. Tu veuxln -s -f ../../hooks/post-merge .git/hooks/post-merge
. Ou vous rendre la vie plus facile:ln -s -f ../hooks .git/hooks
. Votre problème n'a rien à voir avec git..git/hooks
.Réponses:
vous venez d'utiliser un mauvais chemin, cela devrait être:
la source
cd
. Ne devrait-il pas être justeln -s ./hooks/
?.git/hooks
comme répertoire de travail, donc les chemins relatifs doivent être relatifs à ce répertoire. Ceci est plus explicite si vous commencezcd
par.git/hooks
créer le lien symbolique et déterminez le chemin relatif à partir de là.ln
sera stocké en tant que cible et résolu par rapport à l'emplacement du lien.cd
entrer.git/hooks
avant de créer le lien vous aidera à écrire la commande, car vous pouvez ensuite effectuer une saisie semi-automatique vers le chemin correct.prepare-commit-msg
. Le problème est que si j'édite le message de validation en utilisant nano, puis Ctl + X pour abandonner, git termine quand même un commit au lieu d'abandonner comme avant de faire ce changement. Existe-t-il un moyen d'avoir la sortie nano sans provoquer la fin de cet engagement?Bien que vous puissiez utiliser des liens symboliques, vous pouvez également modifier le dossier hooks de votre projet dans vos paramètres git avec:
Ce qui est local par défaut pour ne pas ruiner les hooks git pour vos autres projets. Cela fonctionne pour tous les hooks de ce référentiel, c'est donc particulièrement utile si vous avez plus d'un hook.
Si vous avez déjà des hooks personnalisés
.git/hooks/
que vous ne souhaitez pas partager avec votre équipe, vous pouvez les ajouter dans des hooks / et ajouter un.gitignore
afin qu'ils ne soient pas partagés.la source
Changer de répertoire avant de lier
la source
cd
:ln -s -f ../../hooks/post-merge
Le calcul du chemin est effectué par rapport au lien symbolique. Comprenons à l'aide d'un exemple,
ln -s path/to/file symlink/file
Ici, le chemin vers le fichier doit en fait être le chemin relatif du chemin du lien symbolique.
Le système calcule en fait le chemin du fichier comme
symlink/path/path/to/file
La commande ci-dessus doit être réécrite comme
ln -s ../path/to/file symlink/path
La structure du dossier étant,
la source
En utilisant le commentaire de Michael Cihar, voici un exemple de script bash que j'ai écrit pour créer simplement ces liens symboliques. Ce script se trouve dans git_hooks / dir qui se trouve à la racine du projet. Mon dossier .git / est également dans le même niveau de répertoire.
Mon script doit être exécuté à partir du répertoire git_hooks /. Vous pouvez le modifier pour qu'il se comporte différemment, si vous le souhaitez.
Ce script créera un lien symbolique tout fichier qui n'est pas suffixé avec une extension de fichier dans le répertoire git_hooks /. J'ai un README.txt dans ce répertoire + ce script (nommé symlink.sh). Tous les hooks git réels sont nommés 'pre-commit', 'pre-push', etc. donc ils seront liés par un lien symbolique.
la source
pourquoi pas simplement cp ./hooks/* .git / hooks /
cela a fonctionné pour moi sous Mac OS
la source
I don't have to copy the file from one folder to the other every time someone changes