Я хотів це зробити у Windows, і я знайшов найкращий спосіб - використовувати Monitor Monitor для перевірки змін, а потім, коли він виявив зміни, чи запустіть:
Програма: cmd.exe
Парами: /CC:\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
Для мене я думаю, що це спрацювало досить солідно. Монітор каталогів може бути налаштований для запуску і запуску мінімізований, і він може переглядати кілька різних папок