Je ne parviens pas à faire fonctionner correctement les hooks post-recieve et post-commit avec msysgit (Windows 7 Pro/32 et Ultimate/64). Pour le hook post-commit, j'obtiens l'erreur ci-dessus si je commets à partir de git-bash ou de la console, mais cela fonctionne correctement si je commets via git-gui. Pour un crochet post-réception, tous les trois donnent la même erreur.
Je pense que c'est une sorte de permission ou d'erreur de chemin, mais je ne sais pas vraiment par où commencer.
Ajoutez le Shebang à la première ligne d’hameçon, comme suit:
#!/bin/sh
echo "executing post-commit"
exit 0
Cela m'a aussi laissé perplexe pendant un certain temps et j'ai vu que l'ajout du Shebang corrigeait cela. Dans le monde SVN, même dans * nix, nous avons un script "de pré-validation" et dans Windows, nous avions "pré-commit.bat" et SVN a automatiquement récupéré le fichier bat sous Windows. Git ne semble pas ramasser un pre-commit.bat (ni aucun crochet) et l'ajout du Shebang au fichier de crochet fonctionnait.
Si vous avez le Shebang et qu'il échoue toujours, assurez-vous que <path_to_git>
\bin est défini dans votre variable d'environnement de chemin.
Vous aurez probablement aussi <path_to_git>
\cmd si vous l’avez installé pour fonctionner à partir de la ligne de commande.
J'utilise SourceTree et git LFS et avait un problème similaire: cannot spawn .git/hooks/pre-Push
.
Le correctif consistait à supprimer le fichier pre-Push
(en l’ouvrant, il a découvert qu’il était gravement corrompu) et à redémarrer SourceTree, puis à régénérer le fichier pre-Push
;.
Si quelqu'un, comme moi, rencontre un problème similaire d'accès aux référentiels git via Apache, vous devez définir le paramètre PATH dans la configuration d'Apache, comme suit:
SetEnv PATH "c:/Program Files (x86)/Git/bin;"
C'est une vieille question, mais je me suis battu avec ce problème précis et cette question SO a surgi, alors j'ai pensé que ça valait la peine d'essayer d'enregistrer ce qui a fonctionné pour moi.
En bref: je devais exécuter Apache
en tant qu'utilisateur régulier au lieu de Local System
. Il s’agissait d’un test hérité VM
avec lequel je jouais. Il ne fonctionnait donc que Windows XP
, mais il semble que du moins sur cette plate-forme (et peut-être sur d’autres), msysgit
ne fonctionne tout simplement pas sous le compte Local System
root filesystem
n'est pas mappé correctement). En conséquence, aucune ligne Shebang ne fonctionnera comme git-http-backend ne peut tout simplement pas exécuter les fichiers binaires msysgit (même avec des chemins Windows
absolus).
Basculer Apache pour s’exécuter en tant que compte utilisateur normal a complètement résolu ce problème. Évidemment, vous devez vous assurer que l'utilisateur Apache s'exécute avec les autorisations pour read
/write
les référentiels git
, mais au-delà, assurez-vous simplement que votre ligne Shebang
est #!/bin/sh
et tout doit être copacétique.
Enfin, oui, c'est un gros marteau. Idéalement, vous seriez capable d'utiliser quelque chose comme suexec
sur Windows
, mais une rapide googling
n'indique pas une voie évidente pour aller de l'avant, là-bas. Bien sûr, si quelqu'un a des idées, je serais intéressé.
Pour l'instant, cela fonctionne pour moi, mais cela ne semble pas idéal.
Pour moi, supprimer une ligne de commentaire sur le devant de la ligne Shebang a corrigé l'erreur. Bizarrement, le script fonctionnait très bien à partir du shell, il était simplement erroné lorsqu'il était exécuté en tant que hook.
Pour tortoisegit et LFS, il me suffisait de supprimer les fichiers du dossier .git/hooks.