web-dev-qa-db-fra.com

erreur msysgit avec les crochets: "erreur git: impossible de générer .git/hooks/post-commit: aucun fichier ou répertoire de ce type"

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.

40
Matt

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.

73
manojlds

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.

5
Nick Robson

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

5
Jarrod Smith

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;"
2
Xmister

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

2
user1630539

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.

0
T Corman

Pour tortoisegit et LFS, il me suffisait de supprimer les fichiers du dossier .git/hooks. 

0
Justin Hirsch