6

假設您在一個大型項目上工作,每個版本都有多個功能。對於每個功能開發,我們可能有不同的功能分支(在VCS中)。但是,當所有功能分支合併並完成整合後,就會說功能中的一個功能被丟棄了(這在我們的組織中發生得比您想象的要多)。有沒有辦法在這一點上回滾一個功能?我們通常會做的是找出所有的代碼更改並手動回滾。您是否有任何流程/最佳實踐來幫助減少這種努力?爲了記錄,我們有一個帶有Subversion的java項目作爲VCS。如果某個功能在最後一刻被丟棄,您會做什麼?

+0

正在合併一個功能,而不是一個選項。 – rerun 2010-02-11 05:37:42

回答

5

這取決於您放棄該功能的原因。

如果「在最後時刻」是在系統測試期間,並且您不想重複,那麼我會說您只是禁用了該功能並將其發送。

我們已經完成了這個過去;刪除該功能在創建其他錯誤方面風險太大。如果您不再需要該功能(例如,需求已消失,或實施已被確定爲不正確),那麼在風險方面,只需以最少的代碼更改將其關閉即可。

我的意思是,刪除或隱藏啓用該功能的用戶界面元素,然後用戶不知道它在那裏(只要它默認關閉)。

有希望在未來的版本中,將有機會重構代碼的這一部分,並刪除該功能或正確地重新引入它。

+0

幾乎正確(但仍然+1)。禁用* RE-TEST *,然後發貨。 禁用該功能所需的最小更改。在基於GUI的系統中,這可能與禁用或刪除菜單項一樣簡單。在其他系統中,您需要弄清楚最小變化...... – Mawg 2010-02-11 06:46:45

+0

好的,在功能被禁用後,您仍然需要做一些進一步的系統測試,主要是檢查禁用功能引入的迴歸(例如,您是否意外禁用了一些其他功能),並確保該功能真的被禁用。 – MarkR 2010-03-13 22:38:31

1

如果您使用TortoiseSVN作爲客戶端,則它在右鍵菜單中有一個「從此版本回滾更改」。

只需在工作副本上顯示日誌,然後選擇您想要反向合併的修訂(在這種情況下,表示您在功能分支中合併的位置的修訂)。

alt text http://img64.imageshack.us/img64/9053/svnreversemerge.png

否則,你可以做一個反向的命令行合併。反向合併會創建一個新版本,即HEAD版本,減去您反向合併版本的更改,因此您可以始終「反向反向」合併。 SVN非常棒。

+0

問題在於,在集成了該功能之後,您將因QA/UAT而進行更改,因此會產生非常複雜的回滾。如果可能的話,禁用該功能要安全得多,特別是如果您懷疑該功能是否會在稍後時間恢復(老實說 - 如果您的客戶將編碼時間提交給某個功能,然後改變主意)這個遲到的日子,他們可能會在下週再次改變主意)。 – 2013-04-17 20:53:23

相關問題