2011-09-30 17 views
4

我對Git倉庫中複製在幾個現場的HTTP服務器的Git複製

我的目標是從我的測試服務器到活的HTTP服務器創建複製的問題。所以當我在測試中提交更改時,更改應該也會自動出現在服務器上 我看了一下gerrit2,它看起來不錯,但我試圖用git來做,但由於git使用post-commit hook,我當然我可以做到這一點

所以我試圖在提交後多次推入鉤子(因爲覆蓋似乎是唯一的選擇,因爲如果我合併會有衝突的機會,最後我想要的東西在我的實時服務器上有亂七八糟的文件......)從測試到現場,首先我得到了一些奇怪的錯誤,但後來我添加了強制參數並推送成功,但不幸的是,這些更改沒有出現在遠程服務器上。 我使用ssh協議來交換數據。

如何做到這一點,所以它會很好,可靠?我必須執行的一組命令是什麼?

+0

推到在非裸倉庫中檢出分支通常是不好的;它更新索引而不是工作樹。當你做這些推動時,Git本應該相當強烈地警告你。如果你真的想這樣做,你需要在另一端運行'git reset --hard'。 – Cascabel

回答

1

正如@Jefromi所指出的,推動並不是一個好主意。

取而代之,您可以嘗試通過使用定期運行的腳本(如每小時或每5分鐘的倍數)從生產服務器拉動。這樣你就會知道服務器什麼時候會更新。

但是,如果您在服務器上做任何修改,拉可能會失敗,因爲它會拒絕更新修改後的文件。您可以讓腳本在執行pull操作之前檢查工作副本是否髒,併發送電子郵件讓其他人查看服務器。

0

或者,您也可以設置一個裸露的回購 (git init --bare) 和使用後收到鉤檢查出來,並將其複製到已發佈的目錄(hooks/post-receive

GIT_REPO=$HOME/blah 
TMP_GIT_CLONE=$HOME/tmp/tmpblah 
PUBLIC_WWW=/srv/public_folder/ 

git clone $GIT_REPO $TMP_GIT_CLONE 
mv $TMP_GIT_CLONE $PUBLIC_WWW 
exit 

我這是怎麼管理的網站在我的服務器上,我推送到我的代碼回購(gitosis設置)以及檢出並將更改部署到生產的回購

一個簡單的功能改進是將增加值添加到您的部署腳本中並部署到新的文件夾每次和s意味着更新一個符號鏈接指向它

這麼一推今天會到2011102900旁邊等和符號鏈接將連接目前取其文件夾是最新的(並且由post_receive腳本更新)