2011-04-21 43 views
2

我們正在尋找我們的網絡部署過程中使用Git的清潔方式。我們想要做的就是能夠擁有一個名爲release的分支,並且基本上每當我們部署時,它都會部署來自該分支的代碼。這看起來很容易,因爲我們必須做的是將更改合併到發佈分支中,併爲該版本創建另一個分支(這將與當時的發佈分支匹配)(因此分支稱爲1.1.1)。問題是關於在需要回滾的情況下我們能做些什麼。所以說我們有分支1.1.0和1.1.1。我們發佈了1.1.2版本,這些更改被合併到發行版分支中,並創建了另一個名爲1.1.2的分支。我們需要注意一個需要用於回滾到版本1.1.1的makor錯誤。有沒有乾淨的方式只是發佈分支點1.1.1切換條分公司指向的Git

這似乎是理想的解決方案是有一些辦法有什麼(是否是一個分支,標籤,等等),我們沒有實際上推送任何東西,我們只是用它來指向另一個分支。這種方式當新版本出來時,我們爲該版本創建一個分支,並且只是指向該分支的發行版。如果我們需要回滾,我們只需將版本切換爲指向最後一個知道工作分支。是這樣的可能。

回答

1

只需創建一個名爲currently_live或類似的標籤,並將其指向特定的提交,以便您現在可以全部部署。

這將是從理想地將有一個主分支和獨立的版本分支的分支政策完全獨立的。

使用git tag -f ...當你需要,你可以移動的標籤。

+0

當我更新標籤前進時這樣做很好,但當我嘗試更新後退時,推送失敗,因爲它是「非快進」。無論如何,讓這個工作倒退? – ryanzec 2011-04-21 16:00:54

+0

加推-f似乎解決了這個問題。這樣做時有什麼我應該警惕的嗎? – ryanzec 2011-04-21 16:03:07

0

我會恢復的變更作爲一個新的提交(git revert),並稱之爲「1.1.3」。這可以避免混淆,爲什麼有人可以及時向後旅行:)

1

在GIT中的分支是隻是一個指向代碼的特定版本。因此,您可以擁有release分支,並將任何給定版本的代碼推送到該分支。現在,Git通常會確保您推送到分支的任何新內容都是該分支上已有內容的孩子,以防止意外丟失歷史記錄。但是,如果您使用的是像release這樣的可以降級的分支,則可以在推送時通過將+添加到refspec來覆蓋該分支。

假設您有標籤v1.1.1v1.1.2,並且您希望將您的版本降級到v1.1.1。我還假設您的部署遠程名爲deploy,並且它有一個名爲release的分支,該分支將在您的部署過程中檢出。你可以這樣寫:

git push deploy +v1.1.1:release 
0

使用git-更新裁判

git update-ref -m "new release" --no-deref releasebranch ref:origin/maint 

它也允許一個「裁判」的文件是一個象徵性的指向另一個參考文件通過與四開始字節標題序列「ref:」。