Tôi muốn làm điều này trong các cửa sổ và tìm thấy cách tốt nhất là sử dụng Directory Monitor để kiểm tra các thay đổi sau đó khi phát hiện ra một thay đổi, nó sẽ chạy:
Chương trình: cmd.exe
Params: /CC:\pathToBatchFile.bat
Tập tin đó chứa:
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"
))
Tôi cũng đã thử có một lệnh khác trong đó để thêm tệp ( "%PROGRAMFILES(X86)%\git\bin\sh.exe" --login -i -c "git add *.*"
), nhưng tôi không nghĩ rằng tôi đã làm cho nó hoạt động đúng.
Tôi cũng đã thực hiện một hook hook sau:
#!/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
(Nếu có bất kỳ xung đột nào thì nó sẽ hủy bỏ lực kéo và hủy bỏ lực đẩy, nhưng không có cách nào rõ ràng để nói rằng điều đó đã xảy ra - cuối cùng chúng tôi đã từ bỏ toàn bộ ý tưởng vì lỗi này.)
Lệnh curl đó nói với máy chủ của tôi rằng nó cần thực hiện thao tác kéo mã. Tất cả những gì cần thiết để xử lý nó trong php là:
<?
$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";
}
?>
Vấn đề duy nhất là nó cần được chạy bởi người dùng root thay vì người dùng apache, vì vậy tôi cũng phải tạo một tệp /etc/sudoers.d/
có chứa:
www-data ALL = NOPASSWD: /usr/bin/git
Đối với tôi, tôi nghĩ rằng làm việc khá vững chắc. Thư mục màn hình có thể được cấu hình để chạy khi khởi động và bắt đầu thu nhỏ, và nó có thể xem một số thư mục khác nhau