J'ai un côté serveur repo nu et je suis en mesure de valider et d'envoyer avec succès à partir de ma machine locale. Toutefois, le hook post-réception n'est pas en cours d'exécution. Détails:
-rwxr-xr-x
echo "Some text"
avant et après le hook, mais ceci n'est pas affiché (voir: Post Commit Hook Not Running ). .
user@server:/home/repos/project1/hooks# cat post-receive
#!/bin/sh
echo "Hook is running..."
export GIT_WORK_TREE=/home/web/project1/www/
git checkout -f
rm -rf /home/web/project1/www/temp/
Le problème était lié au montage du système de fichiers. La partition a été montée en tant que noexec
et aucun fichier ne peut donc être exécuté. Cela a empêché le crochet de courir. J'ai enlevé le drapeau noexec
et cela fonctionne maintenant très bien.
Pour qu'un hook Git s'exécute, des autorisations doivent être définies pour lui permettre d'être exécutable. Si un hook ne semble pas fonctionner, vérifiez les autorisations et assurez-vous qu'il est exécutable. Si ce n'est pas le cas, vous pouvez rendre tous les hooks exécutables comme ceci:
chmod ug+x .git/hooks/*
... ou si vous voulez créer un seul hook (par exemple, post-receive
) exécutable:
chmod ug+x .git/hooks/post-receive
(Merci à ce post )
J'ai eu ce problème. J'ai eu une faute de frappe dans mon nom de fichier script.
post-recevoir au lieu de post-recevoir
Semble que GIT n'exécutera PAS le post-receive hook s'il y a no changements dans la base de code.
Dans mon cas,
Le hook de publication n'était pas exécuté, mais l'opération "Push" renvoyait en permanence le message suivant.
Tout est à jour
Donc, je viens de créer un fichier vide dans mon code, j'ai commis et ensuite poussé à distance. Sur lequel le post-receive hook a été exécuté.
J'ai eu le même problème sur un système Centos 6, où il est apparu que SELinux empêchait les scripts de hook de s'exécuter. Transformer httpd_git_script_t en un domaine permissif a été utile (puisque "sesearch -A -s httpd_git_script_t -p exec" n'a donné aucun résultat, c.-à-d. Qu'aucun processus en cours d'exécution dans le domaine httpd_git_script_t n'a été autorisé à exécuter l'autorisation):
semanage permissive -a httpd_git_script_t