मैं खिड़कियों में ऐसा करना चाहता था, और सबसे अच्छा तरीका यह था कि निर्देशिका मॉनिटर का उपयोग परिवर्तनों की जांच करने के लिए किया जाए, जब उसने परिवर्तन का पता लगाया तो इसमें शामिल हैं:
कार्यक्रम: cmd.exe
परम: /सीसी: ENDpathToBatchFile.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
(यदि कोई संघर्ष था, तो यह पुल को नष्ट कर देगा और पुश को समाप्त कर देगा, लेकिन यह बताने का कोई स्पष्ट तरीका नहीं था कि ऐसा हुआ था - अंत में हमने इस एक दोष के कारण पूरे विचार को छोड़ दिया।)
उस कर्ल कमांड ने मेरे सर्वर को बताया कि उसे कोड पर एक पुल करने की जरूरत है। 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";
}
?>
इसके साथ एकमात्र समस्या यह थी कि इसे अपाचे उपयोगकर्ता के बजाय रूट उपयोगकर्ता द्वारा चलाया जाना आवश्यक था, इसलिए मुझे भी इसमें एक फ़ाइल /etc/sudoers.d/बनानी थी:
www-data ALL = NOPASSWD: /usr/bin/git
मेरे लिए, मुझे लगता है कि बहुत ठोस तरीके से काम किया। डायरेक्ट्री मॉनिटर को स्टार्टअप पर चलाने और कम से कम शुरू करने के लिए कॉन्फ़िगर किया जा सकता है, और यह कई अलग-अलग फ़ोल्डरों को देख सकता है