2012-09-19 119 views
1

爲了更好地理解Git和正確的web部署工作流程,我在另一面牆上找到了。當談到與服務器相關的軟件和unix命令時,我是一個新手,所以在回答時請記住這一點。一些問題已經被問到類似的話題,但我沒有找到任何關於特定推送的信息,並通過post-receive鉤子合併到遠程存儲庫。Git倉庫和遠程服務器上的post-receive鉤子

我有3個階段用於部署。

生產(遠程服務器我假設的裸庫)
^
分期(遠程服務器的裸庫)
^
發展(本機)

我混帳起來,在我的本地和分期運行環境到目前爲止。我在暫存服務器上設置了一個post-receive鉤子。這似乎迄今爲止工作得很好,但似乎這個鉤子不會讓我推送可在分段服務器上看到的分支。登臺服務器僅處理主分支狀態下的頁面。這可能是預期的行爲。

我應該在登臺服務器上使用這個鉤子嗎?我看起來可以讓更改生效的唯一方法是首先合併到本地計算機上的主服務器,然後將其推送到分段。這看起來不正確,因爲如果這種變化需要調整。我將不得不撤消在本地合併?

我非常確定裸倉庫和post-receive鉤子在生產服務器上的效果很好。因爲它應該只有一個狀態。

這些可能都是正常行爲,我的工作流可能不正確。對此或任何指導的任何幫助表示讚賞。我已經搜查過這個,我沒有找到任何明確的文件。

回答

1

如果你有超過Staging後收到鉤(即Staging將始終投放master,週期),你可以隨時把你想要的任何分支到master遠程分支無法控制:

git push --force Staging my-funky-branch:master 

注意重新定義這種遠程master分支將會對下游的任何人(來自Staging的任何人可能產生pullfetch)產生問題。

您也可以創建一個特殊的本地分支來跟蹤Stagingmaster,並將所有更改合併到該分支。

git branch --set-upstream staging-master Staging/master 
git checkout staging-master 
git merge --no-ff my-funky-branch 
git push 

如果你有在控制後收到鉤,你可以使用類似this自動爲您服務推動了分公司。

+0

我確實可以控制和訪問post-recieve鉤子,因此我會查看您提供的選項。我有一種感覺,就是默認情況下post-recieve hooked是如何工作的。一個問題。我是否應該在登臺服務器上使用帶有後接收鉤的裸存儲庫。或者,我應該以不同的方式進行討論嗎? – MAZUMA

+1

我在服務器上(web根目錄外)使用裸回購和'checkout -f'完成工作目錄的完全分離(在Web根目錄中)。 – ellotheth