Mon hook post commit ne fonctionne pas après git. J'ai vérifié que le crochet fonctionne si je le lance simplement depuis le terminal. Le code dans le crochet est:
#!/bin/sh
#.git/hooks/post-commit
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".
Perl -pi -e 's/([a-f0-9]+)$/'$( git rev-parse HEAD )/ ../../config/commit.git
J'ai renommé le fichier en post-commit dans ./.git/hooks/ et les autorisations sont -rwxr-x-r-x
donc je ne sais pas pourquoi ça ne marche pas.
Essayez de mettre des lignes d'écho avant et après la ligne Perl comme ceci:
echo "post-commit started"
Perl ...........
echo "post-commit finished"
De cette façon, vous pouvez confirmer si le script est réellement en cours d'exécution, car lorsque vous exécutez
git commit
tu devrais voir
post-commit started
post-commit finished
Vers la fin de votre sortie.
Je vais laisser cela ici comme réponse parce que je suis tombé sur ma propre réponse quand mon hook post-commit ne fonctionnait pas:
chmod +x .git/hooks/post-commit
S'applique probablement à tout type de crochet. En fait, s'applique probablement à tout type de script.
Mon script post-commit n'était pas appelé car:
J'avais nommé le script post-commit.sh
, plutôt que simplement post-commit
.
Pour activer un script de hook, placez un fichier dans le sous-répertoire hooks de votre répertoire .git qui est nommé de manière appropriée (sans aucune extension) et est exécutable. À partir de ce moment, il faut l'appeler. Nous couvrirons la plupart des principaux noms de fichiers de crochet ici. Voir git-scm
Je ne sais pas pourquoi j'avais dans ma tête que les crochets avaient besoin de l'extension de fichier bash.
Je n'ai pas non plus réalisé que les scripts de hook ne peuvent pas avoir des extensions de fichier. Par exemple,
Si vous souhaitez utiliser les scripts de hook fournis, vous devrez les renommer; leurs noms de fichiers se terminent tous par .sample
J'espère que cela aide quelqu'un.
En plus des réponses notées ici, notez que si vous attendez une entrée utilisateur dans votre hook, vous devez rediriger l'entrée standard vers le clavier comme cela (au moins pour un script bash);
exec < /dev/tty