假設您在一個大型項目上工作,每個版本都有多個功能。對於每個功能開發,我們可能有不同的功能分支(在VCS中)。但是,當所有功能分支合併並完成整合後,就會說功能中的一個功能被丟棄了(這在我們的組織中發生得比您想象的要多)。有沒有辦法在這一點上回滾一個功能?我們通常會做的是找出所有的代碼更改並手動回滾。您是否有任何流程/最佳實踐來幫助減少這種努力?爲了記錄,我們有一個帶有Subversion的java項目作爲VCS。如果某個功能在最後一刻被丟棄,您會做什麼?
回答
這取決於您放棄該功能的原因。
如果「在最後時刻」是在系統測試期間,並且您不想重複,那麼我會說您只是禁用了該功能並將其發送。
我們已經完成了這個過去;刪除該功能在創建其他錯誤方面風險太大。如果您不再需要該功能(例如,需求已消失,或實施已被確定爲不正確),那麼在風險方面,只需以最少的代碼更改將其關閉即可。
我的意思是,刪除或隱藏啓用該功能的用戶界面元素,然後用戶不知道它在那裏(只要它默認關閉)。
有希望在未來的版本中,將有機會重構代碼的這一部分,並刪除該功能或正確地重新引入它。
如果您使用TortoiseSVN作爲客戶端,則它在右鍵菜單中有一個「從此版本回滾更改」。
只需在工作副本上顯示日誌,然後選擇您想要反向合併的修訂(在這種情況下,表示您在功能分支中合併的位置的修訂)。
alt text http://img64.imageshack.us/img64/9053/svnreversemerge.png
否則,你可以做一個反向的命令行合併。反向合併會創建一個新版本,即HEAD版本,減去您反向合併版本的更改,因此您可以始終「反向反向」合併。 SVN非常棒。
問題在於,在集成了該功能之後,您將因QA/UAT而進行更改,因此會產生非常複雜的回滾。如果可能的話,禁用該功能要安全得多,特別是如果您懷疑該功能是否會在稍後時間恢復(老實說 - 如果您的客戶將編碼時間提交給某個功能,然後改變主意)這個遲到的日子,他們可能會在下週再次改變主意)。 – 2013-04-17 20:53:23
- 1. 如果證書被丟棄,加密數據會發生什麼?
- 2. 如果三次握手的最終ACK被丟棄會發生什麼?
- 3. 在Oracle中,爲什麼當一個表分區被丟棄
- 4. 爲什麼grunt的日誌功能會被棄用?
- 5. 如果圖像已被丟棄,禁用圖像丟棄?
- 6. 當一個可拖動的元素被丟棄時,甚至會發生什麼?
- 7. 如果GraphicsPath在使用後丟棄
- 8. 如果沒有任何CSS,功能手機會做什麼?
- 9. 爲什麼我會用.innerText丟失最後一個空字符?
- 10. 當APNS中的通知被「丟棄」時會發生什麼?
- 11. 如何在使用某個功能後維護您的網址?
- 12. 架構不會被丟棄在hbmddl.auto = create.drop
- 13. &:a功能在做什麼?
- 14. 如果某個屬性的值被覆蓋,會發生什麼?
- 15. 虛擬繼承:如果關鍵字在某個時刻被遺忘會發生什麼?
- 16. Jquery:防止droppable項目被丟棄在某些可丟棄的div之外
- 17. BehaviorSubject發出後丟棄最後一個值
- 18. 刷新後保持可丟棄的最後一個位置
- 19. 我怎麼能丟棄
- 20. rabbitmq丟棄消息,如果某些字段值不唯一?
- 21. 如果在將要丟棄的Windows窗體中使用WPF用戶控件,該控件是否會被丟棄?
- 22. 這個Font對象什麼時候被丟棄?
- 23. 什麼是在某些事件全部被觸發後做某些事的最佳做法
- 24. C功能已被棄用
- 25. 如何在某個功能完成後才能執行某個功能?
- 26. 做什麼,如果沒有在Scala的功能
- 27. 放棄最後一個ArrayList
- 28. JQuery ui drop event?如何知道什麼被丟棄?
- 29. 比較列表後丟棄一個
- 30. Gearman功能沒有被丟棄,它顯示錯誤
正在合併一個功能,而不是一個選項。 – rerun 2010-02-11 05:37:42