Saya ingin melakukan ini di windows, dan menemukan cara terbaik adalah menggunakan Direktori Monitor untuk memeriksa perubahan lalu ketika mendeteksi perubahan, jalankan:
Program: cmd.exe
Params: /CC:\pathToBatchFile.bat
File kumpulan itu berisi:
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"
))
Saya juga mencoba memiliki perintah lain di sana untuk menambahkan file ( "%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*"), tapi saya rasa saya tidak bisa berfungsi dengan benar.
Saya juga membuat kait pasca-komit yang berisi:
#!/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
(Jika ada konflik maka itu akan membatalkan tarikan dan membatalkan dorong, tetapi tidak ada cara yang jelas untuk mengatakan bahwa telah terjadi - pada akhirnya kami meninggalkan seluruh gagasan karena satu kekurangan ini.)
Perintah curl memberi tahu server saya bahwa itu perlu melakukan tarik pada kode. Semua yang diperlukan untuk menanganinya di php adalah:
<?
$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";
}
?>
Satu-satunya masalah dengan itu adalah itu perlu dijalankan oleh pengguna root, bukan pengguna apache, jadi saya juga harus membuat file /etc/sudoers.d/berisi:
www-data ALL = NOPASSWD: /usr/bin/git
Bagi saya, saya pikir itu bekerja cukup solid. Direktori Monitor dapat dikonfigurasi untuk dijalankan pada startup dan mulai diminimalkan, dan dapat menonton beberapa folder berbeda