我一直在搜索一整天以獲取服務器端所做的更改(例如當WordPress安裝新插件更新或某人上傳某些內容時)將被提交給我用於網站部署的Git存儲庫。這是我得到的最接近:在推送更新之前向Git存儲庫提交服務器端更新
#!/bin/sh
git --git-dir=/home/cameronm/git/cameronmalek.git --work-tree=/home/cameronm/public_html/ checkout -f master
git --work-tree=/home/cameronm/public_html/ diff --exit-code &>-
if [ "$?" -ne 0 ]; then
git --work-tree="/home/cameronm/public_html/" add .;
git --work-tree="/home/cameronm/public_html/" commit -m "automated server-side update";
fi
這種解決方案的問題,因爲這個職位的原因,是它所有發生在錯誤的順序。我正在尋找一種方法,在我的更新被推送之前,將其他非Git方所做的所有更改提交到活動網站目錄。原因是我希望能夠看到合併衝突,如果我試圖推動的更新覆蓋最近添加到服務器的內容。
我已經整晚試圖找出這一個。描述(和Google)是一個很難的問題,所以如果我能爲你澄清任何事情,請給我發一張便條。
感謝您提供的任何幫助!
更新!
您可以在我的Gist頁面上看到我的工作解決方案(單獨預接收和後接收鉤子)。這裏是pre-receive hook和post-receive hook。
我__am__罰款不能推動,如果有新的提交。事實上,這就是要點:迫使開發人員在服務器上發生更改時更仔細地查看事情。 這個問題的大部分來自於對服務器端鉤子行爲的誤解。我認爲一旦推送到服務器,它就不能通過服務器端鉤子反彈一個錯誤,並停止發生推送。 我將把它更新爲一個預接收鉤子,該鉤子返回一個錯誤,並在工作目錄不乾淨時阻止推送,並避免自動提交更改。 –
我可以幫助:) – Chronial