Git post-recevoir crochet ne fonctionne pas
Mon installation est un windows serveur XAMPP, avec cURL est activé, et Git et Hudson installé. Hudson sondages Git chaque minute de surveiller les changements, et s'il les trouve, il crée une génération. J'utilise ce build que mon serveur de test. Cela fonctionne très bien.
Je tiens à mettre en place un post-recevoir crochet sur ma centrale dépôt distant qui exécute la force de construire la fonction de l'Hudson.
J'ai créé un post-recevoir un fichier appelé "post-recevoir" dans les crochets répertoire dans mon central repository Git, celui qui est poussé à partir des développeurs branches locales. Ils pousser leur propre branche sur le référentiel central. Je veux lancer le post-recevoir construire immédiatement après chaque pression, au lieu d'avoir Hudson sondage Git chaque minute.
Quand j'ouvre un shell sur le serveur distant et exécuter "post-recevoir" dans les crochets dossier, il s'exécute. Il n'est tout simplement pas appelé quand les gens poussent à partir de leur dépôt local des copies de la centrale.
Peut-être que je ne suis pas d'expliquer ce droit, mais c'est la façon dont je comprends Git.
L'après-recevoir le code est deux lignes:
#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken
Encore une fois, quand j'ouvre un shell et de l'exécuter, il fonctionne, mais quand quelqu'un pousse, rien ne se passe, jusqu'à ce qu'une minute ou moins, Hudson se rend compte que Git a été changé, et puis il génère.
Je suis heureux de clarifier si besoin. Toute aide est grandement appréciée.
EDIT: Après avoir joué un peu avec elle, je me sens comme peut-être post-recevoir n'est pas d'exécution car les références ne sont pas mis à jour de quelque chose? Le git documentation dit
Il s'exécute sur le dépôt distant une fois, après toutes les refs ont été mis à jour.
Est-ce à dire, si rien n'mises à jour, il ne sera pas exécuté? Et si oui, je suis sûr que les choses sont la mise à jour de toute façon donc ça ne devrait pas s'appliquer.
Voici mon processus:
Apporter des modifications à l'échelle locale.
Commettre des modifications.
Appuyez sur à partir de ma TÊTE à la distance de la branche appelée "mybranch" (pas la branche master, ce qui est vérifié)
C'est le point où je veux que mon crochet à exécuter.
Pas sûr. Il l'exécute quand je le lance via Git Bash, mais il ne fonctionne pas quand je pousse. Comment puis-je vérifier les permissions?
l'autorisation correcte dépend de la façon dont vous êtes le partage de votre dépôt, et les configurations réelles. Cependant, msquared de vous indique le moyen de donner de l'exécutable de l'autorisation à tous les utilisateurs/groupes, de sorte qu'il devrait fonctionner si le problème est en effet que.
Le fichier est exécutable, il est tout simplement pas en cours d'exécution, ou exécutée correctement, quand j'ai git push. D'autres idées?
Mettre un echo déclaration dans votre post-recevoir crochet pour voir si elle est effectivement en cours d'exécution, par exemple, "echo crochet couru!" -- git de l'envoyer à l'appelant.
OriginalL'auteur spanky | 2011-02-09
Vous devez vous connecter pour publier un commentaire.
Veuillez vérifier si votre fichier est exécutable droits. Sinon, il ne peut pas être exécutée.
Quelque chose comme
rwxr-xr-x
devrait être suffisant.Vous pouvez ajouter le morceau avec
OriginalL'auteur msquared
Quel mode de transport utilisez-vous pour pousser à la mise en pension?
Crochets sont exécutés uniquement lors de l'utilisation de "intelligents" les protocoles de transport tels que ssh et de la cgi de la mise en œuvre du protocole http. Pour les autres "idiot" protocoles de transport tels que ftp, rsync, et les plus âgés d'implémentation de http, les crochets ne sera jamais exécutée. Je suppose que le protocole git à l'exécution de crochets, mais en poussant plus que le protocole n'a jamais été considéré comme une bonne idée.
Vous pouvez toujours utiliser HTTP si vous utilisez kernel.org/pub/software/scm/git/docs/git-http-backend.html mais je ne sais rien à propos d'essayer de l'installer sur Windows. Vous pouvez également configurer un serveur SSH en utilisant soit un natif de Windows serveur ou avec cygwin, et dont je n'ai aucune expérience avec. Comme vous l'avez constaté, Windows n'est pas exactement le plus sympathique de l'OS de l'hôte git repos.
Votre commentaire s'est avérée utile pour moi de mettre en place un jouet de dépôt sur HTTP et que j'avais besoin de crochets pour être exécuté. Merci!
comment puis-je vérifier que la méthode de transport, je suis à l'aide?
Si dans git extensions des dépôts distants, je vois une url commençant par [email protected] puis son transport ssh méthode, non? Alors quoi d'autre peut être la raison de son pas de tir?
OriginalL'auteur Arrowmaster
Toutes ces réponses sont utiles, mais il s'avère que j'avais besoin de le répertoire "bin" de git dans ma variable PATH. J'ai eu la "cmd" répertoire seulement. Ajouté
c:\my_path_to_git\git\bin
de CHEMIN et il fonctionne très bien. J'ai trouvé cette réponse par essais et erreurs et en regardant le journal des erreurs d'apache. Merci à vous tous pour votre aide!OriginalL'auteur spanky
Essayer à l'aide du chemin d'accès complet à friser en post-recevoir un fichier, le CHEMIN peut être différent lors de l'exécution de script à la main.
Si vous voulez voir ce qu'est l'environnement d'exécution de post-recevoir script:
ou tout simplement (il va montrer env. variables après poussant dans repo)
Aussi, je ne suis pas sûr de savoir comment exécution de l'interpréteur de scripts fonctionne sur windows, donc #!/chemin/vers/installé/sh au lieu de #!/bin/sh pourrait aider
Vous avez besoin de savoir où il est installé et utiliser le chemin d'accès complet de la tuile dans votre script. Exécutez le shell git (shell) manuellement et tapez "qui curl" -- il y a une impression de quelque chose comme /usr/bin/curl. Remplacer "curl" dans votre script avec tout ce qu'elle imprime.
OriginalL'auteur XANi
Je pense que la réponse est simple, vous devez déplacer le contenu de la post-recevoir crochet côté serveur au lieu du côté client
OriginalL'auteur Mark Livingston