Git hooks ne tire pas

J’ai git en cours d’exécution sur un PC Windows local et tout fonctionne parfaitement; Jenkins et Phing travaillent pour automatiser mes processus de construction et de test, mais la dernière étape consiste à lancer automatiquement la construction une fois la validation effectuée dans git.

J’ai essayé d’append post-commit au répertoire .git / hooks de mon repo local avec les éléments suivants:

curl http://localhost:8198/git/notifyCommit?url=c:\scm\myProject 

Si je lance cette commande directement depuis la ligne de commande, Jenkins lance le travail correctement, mais quand je pousse un commit, il ne se déclenche pas.

De plus, j’ai essayé d’append le script à l’ adresse https://github.com/MestreLion/git-tools/blob/master/git-restore-mtime dans le répertoire hooks du repo principal nommé post-checkout afin que je puisse append le commit heure que le fichier a modifié l’heure lorsque cloné. Ce n’est pas non plus un tir.

Dois-je faire quelque chose en particulier dans git ou mon repo pour permettre aux crochets de tirer? Si ce n’est pas le cas, y a-t-il quelque chose en particulier où je peux essayer de commencer le dépannage?

Dois-je faire quelque chose en particulier dans git ou mon repo pour permettre aux crochets de tirer?

Principalement:

  • assurez-vous que le hook est exécutable ( chmod 775 .git/hooks/post-commit , ce qui n’est pas vraiment nécessaire sous Windows)
  • assurez-vous que « curl » est dans %PATH% (ce qui est le cas si votre < c:\path\to\git > \ bin est dans ledit chemin)
  • assurez-vous que votre test de ligne de commande a utilisé le paquet curl avec Git, et pas une autre boucle comme le paquet avec GoW Gnu sous Windows (si vous avez installé GoW)
  • ajoutez, si cela vous aide, un #!/bin/sh au début de votre script post-commit (puisqu’il sera exécuté par le msh bash)
  • le nom doit être post-c ommit (sensible à la casse, pas d’extension comme .sh ou .bat )

L’op mentionne un problème avec des guillemets manquants autour de l’argument curl .
Cela est cohérent avec le fait qu’il est appelé dans une session msys bash et que les règles de citation du shell s’appliquent.
Je m’assurerais que le caractère ‘ \ ‘ n’est pas interprété aussi bien. Voir ” Quelle méthode de citation protège quels caractères? “:

Les guillemets doubles ( "..." ) protègent tout sauf les guillemets doubles, les barres obliques inverses, les signes dollar et les backquotes, jusqu’au double guillemet suivant.
Une barre oblique inverse peut être utilisée pour protéger " , \ , $ ou entre guillemets.
Une paire backslash-newline disparaît complètement; une barre oblique inverse qui ne précède pas " , \ , $ ou newline est prise littéralement.

Dans votre cas, j’utiliserais:

 curl "http://localhost:8198/git/notifyCommit?url=c:\\scm\\myProject" 

Il me semble que je devais placer des guillemets autour de l’URL pour qu’elle définisse le chemin local correct:

 curl "http://localhost:8198/git/notifyCommit?url=c:\scm\myProject" 

Cela fonctionne maintenant comme prévu.