web-dev-qa-db-fra.com

le crochet post-réception git ne fonctionne pas

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:

  • Utiliser SSH comme protocole
  • J'ai renommé le standard "post-receive.sample" en "post-receive"
  • Ce fichier a les permissions -rwxr-xr-x
  • Le fichier appartient au même utilisateur que le référentiel, qui est le même utilisateur SSH qui se connecte et insère
  • La poussée réelle se passe bien; les fichiers sont mis à jour - c'est juste le crochet qui ne fonctionne pas
  • J'ai essayé de mettre echo "Some text" avant et après le hook, mais ceci n'est pas affiché (voir: Post Commit Hook Not Running ). 
  • Le script de crochet est inclus ci-dessous, bien que cela ne semble pas causer le problème
  • Utiliser git 1.7.0.4 sur Ubuntu 10.04

.

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/
31
user943301

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. 

13
user943301

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 )

56
Nick F

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

19
dericbytes

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é.

2
Rakesh

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
0
micha137