SVN :Keep your feature branch up to date
前言
在我工作的團隊中,幾個月前我們改變了我們使用svn的方法,加入了feature branch的概念,就是每開發一個新的功能就需要從主幹開一個branch出來做開發,以免開發中的功能影響到其他人的作業(bug fix ...)。我們在改變規則的時候討論了很多次,原本以為規則已經很OK了。殊不知,才是惡夢的開始。
老舊的branch
有些功能branch分出來之後,此功能可能初步開發完成,尚未測試完成。但因為專案時程與需求變動的關係,導致這個功能的優先順序降低,所以不能跟著下次的release出去,且被assign更緊急的工作,這個feature branch 從主幹分出來太久,之後要merge回主幹可能會有一大堆衝突與問題。而你也沒辦法保證被svn auto merge後的結果一定是正確的,這個時候問題就來了。
如何解決老舊的feature branch?
我找了一些資料,這篇stackoverflow上是跟我一樣的問題Subversion Branch/Trunk Best Practice - keeping Branch Up-to-Date?,其中提到的我覺得OK的做法有幾點:
在我工作的團隊中,幾個月前我們改變了我們使用svn的方法,加入了feature branch的概念,就是每開發一個新的功能就需要從主幹開一個branch出來做開發,以免開發中的功能影響到其他人的作業(bug fix ...)。我們在改變規則的時候討論了很多次,原本以為規則已經很OK了。殊不知,才是惡夢的開始。
老舊的branch
有些功能branch分出來之後,此功能可能初步開發完成,尚未測試完成。但因為專案時程與需求變動的關係,導致這個功能的優先順序降低,所以不能跟著下次的release出去,且被assign更緊急的工作,這個feature branch 從主幹分出來太久,之後要merge回主幹可能會有一大堆衝突與問題。而你也沒辦法保證被svn auto merge後的結果一定是正確的,這個時候問題就來了。
如何解決老舊的feature branch?
我找了一些資料,這篇stackoverflow上是跟我一樣的問題Subversion Branch/Trunk Best Practice - keeping Branch Up-to-Date?,其中提到的我覺得OK的做法有幾點:
- 常常把主幹的code merge到你的feature branch,也就是說常常更新你的feature branch,就像每次開發前要update code一樣(好像有點爛,不過這好像已經是最好的辦法了
- 主動教你的團隊如何把code merge做好,且誰做更動的就應該由更動的人做merge的動作
我也覺得要常常更新feature branch,但為時已晚ㄎㄎ,我還是需要merge一大堆change,解決一大堆衝突,慘兮兮。既然都要做了順便提一下如何 Keep your feature branch up to date.
有人有更好的辦法歡迎留言告訴我。
Keep your feature branch up to date.
SV作法其實很簡單,就是把主幹merge到branche就好。
- Keeping a Branch in Sync
- Svn book - Branching and Merging > Keeping a Branch in Sync Without Merge Tracking
- Subversion Tips and Tricks > Keeping your branch from getting crusty
這幾篇的做法都差不多
- svn co your-branch
- cd your-branch
- svn log --stop-on-copy 找出你當初branch 出來的revsion number (這裡假設是X)
- svn merge -r X:HEAD your-trunk
- 如果有衝突,解決他
- 不想出事,最好記得跑測試
- svn ci
看到我的29個衝突,有點想逃避。
唯一解決方法應該就是你說的常常把trunk merge到branch。不過我都用Git,Git的merge還有branch功能比SVN強很多。
回覆刪除同意你的說法,不過我還不太會用git,公司也是用svn。 GIT好像蠻值得學的
刪除master merge 回 branch +1。
回覆刪除有些雖然知道方法,不過做起來就是有難度。