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的做法有幾點:

  • 常常把主幹的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就好。
這幾篇的做法都差不多
  1. svn co your-branch
  2. cd  your-branch 
  3. svn log --stop-on-copy 找出你當初branch 出來的revsion number (這裡假設是X)
  4. svn merge -r X:HEAD  your-trunk
  5. 如果有衝突,解決他
  6. 不想出事,最好記得跑測試
  7. svn ci
看到我的29個衝突,有點想逃避。


留言

  1. 唯一解決方法應該就是你說的常常把trunk merge到branch。不過我都用Git,Git的merge還有branch功能比SVN強很多。

    回覆刪除
    回覆
    1. 同意你的說法,不過我還不太會用git,公司也是用svn。 GIT好像蠻值得學的

      刪除
  2. master merge 回 branch +1。
    有些雖然知道方法,不過做起來就是有難度。

    回覆刪除

張貼留言

這個網誌中的熱門文章

電腦網路project