ฉันต้องการทำเช่นนี้ใน windows และพบวิธีที่ดีที่สุดคือการใช้การตรวจสอบไดเรกทอรีเพื่อตรวจสอบการเปลี่ยนแปลงจากนั้นเมื่อตรวจพบว่ามีการเปลี่ยนแปลงการทำงาน:
โปรแกรม: 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 *.*") แต่ฉันคิดว่าฉันทำงานไม่ถูกต้อง
ฉันทำเบ็ด post-commit ที่มี:
#!/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";
}
?>
ปัญหาเดียวที่เกิดขึ้นคือต้องมีการเรียกใช้โดยผู้ใช้รูทแทนที่จะเป็นผู้ใช้ apache ดังนั้นฉันจึงต้องสร้างไฟล์/etc/sudoers.d/ที่มี:
www-data ALL = NOPASSWD: /usr/bin/git
สำหรับฉันฉันคิดว่ามันใช้งานได้ดีทีเดียว การตรวจสอบไดเรกทอรีสามารถกำหนดค่าให้ทำงานเมื่อเริ่มต้นและเริ่มย่อให้เล็กสุดและสามารถดูโฟลเดอร์ต่าง ๆ ได้