2015-10-17 87 views
-1

對不起,我想不出一個好的方法來解釋它在一個句子中的標題。SVN恢復更改。重新申請後續更改

所以我想知道的是爲多個開發人員構建SVN的最佳方法。我們有一個Dev(Trunk),UAT,Release。一旦發佈完成,它將被標記爲記錄。

每個人都可以在Dev或分支中工作,如果功能足夠大以保證它。一旦他們測試了並且對他們的變化感到滿意,他們就會將他們的變化從開發者合併到UAT或者(分支到開發者到UAT)。

問題出現在UAT中失敗時。我們需要能夠消除這種變化。我們嘗試在系統的完全獨立部分上工作,但這並非總是可行。所以有時候我們可能有:

變化1個
變化2
更改3
更改4

變化1和3改變都影響到一些薩姆斯文件。更改1未通過測試。然後,我們可以恢復變更1中受影響的文件,但是這也將恢復變更4中的變更。是否有辦法將所有變回原來的變更爲1,然後重新申請以便進行後續更改。我知道我們可以手動重新組合所有更改,但可能會同時進行30個更改,因爲它是一個非常大的系統。

我知道這可能會導致更改4不再起作用,因爲它可能無意中依賴於更改1內的更改。但是在大多數情況下,id希望它能夠正常工作。

首先這是可能的自動化方式嗎?

第二是它實際上是一個有效的工作程序?

如果不是有更好的方法來管理多個開發人員同時在系統上工作,並允許拉動變更集?

感謝

+0

如果你在svn工作,git怎麼樣? –

+0

我爲Git添加標籤的原因是它可能是解決此問題的更合適的解決方案。 – stf

回答

0

唯一的100%可靠的解決這個問題是避免合併功能(不直接在彼此相關的),直到他們一起過去了UAT,甚至更好 - 部署生產。這個方向通常被稱爲Continuous Delivery。對於UAT需要較短的交付時間,並且部署周圍需要強大的工程規範。

如果您還沒有準備好轉移到CD,那麼您將最終面臨需要按照描述恢復一些更改。一些類似git的VCS可以簡化這個過程,但不會通過某種魔法解決主要問題。

至於你的例子中的技術,你總是可以回覆有問題的Change 1(在svn或git revert <sha1>合併反向更改)。您將被svn和git通知明顯的文本衝突,您可以通過手動修復這些衝突,也可以從恢復後來的相關更改開始。 git revert <Change 3>; git revert <Change 1>在你的情況下,隨後再重新做Change 3。 SCM將無法通過Change 4檢測到更高階的潛在衝突。

+0

我知道並得到一些案例,當C1或C2工作,但是C1和C2不工作時 –