Я хотел сделать это в Windows, и обнаружил, что наилучшим способом было бы использовать Directory Monitor для проверки изменений, а затем при обнаружении изменения запустить:
Программа: cmd.exe
Параметры: / C C: \ pathToBatchFile.bat
Этот пакетный файл содержал:
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"
))
Я также пытался добавить туда другую команду для добавления файлов ("%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*"
), но я не думаю, что это работает правильно.
Я также сделал хук после фиксации, содержащий:
#!/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
(Если бы были какие-либо конфликты, то это могло бы прервать тягу и прервать толчок, но не было никакого четкого способа сказать, что произошло - в конце концов, мы отказались от всей идеи из-за этого единственного недостатка.)
Эта команда curl сообщила моему серверу, что ей нужно потянуть код. Все, что было необходимо для обработки в php, было:
<?
$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";
}
?>
Единственная проблема с этим состояла в том, что он должен был запускаться пользователем root вместо пользователя apache, поэтому мне также пришлось создать файл в /etc/sudoers.d/
, содержащий:
www-data ALL = NOPASSWD: /usr/bin/git
Мне кажется, это сработало довольно хорошо. Монитор каталогов можно настроить для запуска при запуске и запуска в свернутом виде, а также он может просматривать несколько разных папок