J'ai écrit mon propre hook post-fusion personnalisé, maintenant j'ai ajouté un répertoire "hooks" à mon dossier de projet principal (car git ne suit pas les modifications dans .git/hooks), j'ai lu quelque part que je pouvais créer un lien symbolique à partir de hooks. to .git/hooks afin que je n'ai pas à 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-fusion .git/hooks/post-merge" fonctionne bien, mais créer un lien dur est le même que copier, je suppose ....
vous venez d'utiliser le mauvais chemin, il devrait être:
ln -s -f ../../hooks/post-merge .git/hooks/post-merge
Bien que vous puissiez utiliser des liens symboliques, vous pouvez également modifier le dossier des crochets de votre projet dans vos paramètres git avec:
git config core.hooksPath hooks/
Ce qui est local par défaut pour ne pas gâcher les hooks git pour vos autres projets. Cela fonctionne pour tous les hooks de ce référentiel, il est donc particulièrement utile si vous avez plus d'un hook.
Si vous avez déjà des hooks personnalisés dans .git/hooks/
que vous ne voulez pas partager avec votre équipe, vous pouvez les ajouter dans des hooks/et ajouter un .gitignore
afin qu'ils ne soient pas partagés.
Changer de répertoire avant de créer un lien
cd /path/to/project-repo/.git/hooks
ln -s -f ../../hooks/post-merge ./post-merge
pourquoi pas juste cp ./hooks/* .git/hooks /
cela a fonctionné pour moi sous Mac OS
À l'aide du 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/se trouve également au même niveau de répertoire.
#!/usr/bin/env bash
pwd=$(pwd);
# Script is designed to be ran from git_hooks/ dir
if [[ "$pwd" == *"git_hooks"* ]]; then
files=$(ls | grep -v -e '.*\.');
while read -r file; do
ln -s ../../git_hooks/$file ../.git/hooks/
echo "Linked $file -> ../.git/hooks/$file"
done <<< "$files";
else
echo "";
echo "ERROR: ";
echo "You must be within the git_hooks/ dir to run this command";
exit 1;
fi
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 avec tout fichier ne portant pas suffixe d'extension dans le répertoire git_hooks /. J'ai un fichier README.txt dans ce répertoire + ce script (nommé symlink.sh). Tous les hooks git sont nommés 'pre-commit', 'pre-Push', etc.
Le calcul du chemin est fait par rapport au lien symbolique. Comprenons en utilisant un exemple,ln -s path/to/file symlink/file
Ici, le chemin du fichier doit être en réalité le chemin relatif du chemin des liens symboliques.
Le système calcule le chemin du fichier sous la forme 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,
/code
------ lien symbolique/fichier
------ chemin/vers/fichier