Ich wollte dies in Windows tun und fand heraus, dass der beste Weg darin bestand, Directory Monitor zu verwenden, um nach Änderungen zu suchen , und diese dann auszuführen, wenn eine Änderung festgestellt wurde:
Programm: cmd.exe
Parameter: /CC:\pathToBatchFile.bat
Diese Batch-Datei enthielt:
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"
))
Ich habe auch versucht, einen anderen Befehl zum Hinzufügen von files ( "%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*") zu verwenden, aber ich glaube nicht, dass das richtig funktioniert.
Ich habe auch einen Post-Commit-Hook erstellt, der Folgendes enthält:
#!/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
(Wenn es Konflikte gäbe, würde dies das Ziehen und das Drücken abbrechen, aber es gab keinen klaren Weg, um festzustellen, dass dies geschehen war - am Ende haben wir die gesamte Idee wegen dieses einen Fehlers aufgegeben.)
Dieser Curl-Befehl teilte meinem Server mit, dass der Code abgerufen werden muss. Alles, was benötigt wurde, um es in PHP zu handhaben, war:
<?
$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";
}
?>
Das einzige Problem dabei war, dass es vom Root-Benutzer anstelle des Apache-Benutzers ausgeführt werden musste, sodass ich auch eine Datei erstellen musste, die Folgendes /etc/sudoers.d/enthielt:
www-data ALL = NOPASSWD: /usr/bin/git
Für mich hat das ziemlich solide funktioniert. Directory Monitor kann so konfiguriert werden, dass es beim Start ausgeführt und minimiert gestartet wird, und es kann mehrere verschiedene Ordner überwachen