Je voulais pour ce faire, dans windows, et a trouvé le meilleur moyen était d'utiliser le Répertoire de Moniteur pour vérifier les modifications, puis lorsqu'il a détecté un changement de l'exécuter:
Programme: cmd.exe
Params: /C C:\pathToBatchFile.bat
Que fichier batch:
c:
cd c:\gitRepoDirectory\
(if exist "%PROGRAMFILES(X86)%" (
"%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git commit -am AutoCommitMessage"
) else (
"%PROGRAMFILES%\git\bin\sh.exe" --login -i -c "git commit -am AutoCommitMessage"
))
J'ai aussi essayé d'avoir une autre commande pour ajouter des fichiers ("%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*"
), mais je ne pense pas que je l'ai eu à travailler correctement.
J'ai aussi fait un post-commit hook contenant:
#!/bin/sh
git.exe pull -v --progress "origin"
git.exe push --progress "origin" master:master
curl.exe -s https://webserverdomain.com/updateFromGitHook.x?r=repoName
(Si il y avait des conflits, puis il abandonne la traction et abandonner le pousser, mais il n'y avait pas de façon claire de dire ce qui s'était passé - à la fin, nous avons abandonné l'idée à cause de ce défaut.)
Qui commande curl dit à mon serveur qu'il est nécessaire de faire une traction sur le code. Tout ce qui était nécessaire pour traiter en php est:
<?
$r = $_GET['r'];
if (!empty($c)) {
//use system instead of exec if you want the output to go back to the git client
exec("cd /path/to/repo/parent/$r; sudo git reset --hard HEAD; sudo git pull;");
echo "\n\nServer: Updated\n\n";
} else {
echo "\n\nServer: UPDATE FAILED\n\n";
}
?>
Le seul problème avec cela était-il nécessaire pour être exécuté par l'utilisateur root à la place de l'utilisateur apache, donc, j'ai aussi eu à faire un fichier dans /etc/sudoers.d/
contenant:
www-data ALL = NOPASSWD: /usr/bin/git
Pour moi, je pense que cela a fonctionné assez solidement. Annuaire Moniteur peut être configuré pour s'exécuter au démarrage et commencer à les réduire, il peut regarder plusieurs dossiers différents