2008-11-06 47 views
6

我們在Subversion中使用功能分支來進行我們的開發,這是將代碼保留在尚未準備好主線的版本控制中的一種非常方便的方法。但是,無論何時我將特性分支修訂版合併到主線中,都是一種痛苦。現在,我經歷以下步驟:將特性分支合併到Subversion主線中的最佳方式是什麼?

  1. 退房原始特徵分支修訂到新目錄
  2. 我目前的開發和原有的特性分支目錄之間執行差異與像超越工具比較
  3. 檢出當前主線修訂到新目錄
  4. 將新/更改的文件合​​併到當前的主線目錄中。
  5. 用我的IDE,以確保所有文件的執行差異被正確檢出/添加到顛覆
  6. 編譯和測試
  7. 提交

在我看來,有很大的發揮空間在這個過程中出現錯誤,每當我走完這些步驟時,都會讓我感到緊張。當然,在我的特性分支中,所有東西都被檢入到Subversion中,所以任何步驟中的錯誤都是可以恢復的。

我相信Subversion 1.5有一種合併分支到主線的方法,但我們仍然使用Subversion 1.4。其他人正在用什麼來簡化將Subversion中的特性分支合併到主線開發中的步驟?你在使用不同的工具嗎?你在利用Subversion 1.5中的合併功能嗎?

+0

我遵循相同的步驟,但使用SourceGear的DiffMerge作爲我的比較工具。這是一個PITA,我認爲TFS做得很好,我想念一件事。 – cfeduke 2008-11-06 18:21:02

+0

在升級到1.5之前(我曾經是一個奢侈品),我使用完全相同的工具完成了相同的步驟(Beyond Compare 3,這非常棒)。這很費勁,有時很乏味,但我從來沒有遇到過問題。隨着SVN 1.5(見下文),生活變得更容易... – Dan 2008-11-07 04:08:17

回答

6

我現在正在使用Subversion 1.5的新--reintegrate功能,我覺得它很棒。這比手動方式更容易,更容易出錯。然而,不足之處在於,新的合併功能需要存儲庫和客戶端都處於1.5,並且對1.5存儲庫的更改不允許除1.5以外的任何客戶端使用...所以爲了獲得合併功能,它基本上是全或無的情況。

至於你原來的問題,你只需要保持非常嚴格的跟蹤你在開發過程中合併到你的工作分支的哪些主要分支版本。但是,即使使用1.5的--reintegrate特性,仍然很重要的一點是確保主分支的重新集成的工作副本在提交之前看起來正確並編譯。它基本上使生活變得容易很多(特別是對於壽命更長的功能分支),因爲您不必針對您更改的內容以及將其他分支的更改集成到功能分支時的嚴格日誌。

subversion.tigris.org上的發行說明文檔編寫得非常好,我建議您簡單查看它以查看1之間的所有更改。4和1.5,並對新的合併設施進行了很好的描述。

3

第1步,第2步,第4步和第5步構建在subversion中,命令'svn merge'執行它。在主線類型'svn merge -r startrev:lastref svn:// repository/branchurl'的工作副本上。 Startref和lastref將表示修訂窗口,應將其合併到主線中。 'svn:// repository/branchurl'應該是你的分支的URL。

Subversion 1.5爲此功能提供了更好的支持。您不再需要指定要合併的修訂版,因爲Subversion現在可以保存關於合併的信息,並簡單地合併所有尚未合併的修訂版。

Subversion-book瞭解更多關於它的信息。

2

如果這是你的分支要合併回主線分支(即你不是一個積分誰做,對其他開發商),這裏就是你需要做什麼:

  • 寫下修訂您最後將主線合併到您的分支中(以保持同步)。讓我們把它稱爲「LASTSYNC」
  • 退房主線分支到一個新的目錄(如MergeFeatureBranchToTrunk),建立它在該分支
  • ,使用svn merge "LASTSYNC":HEAD svn://path/to/FeatureBranch .
  • 解決衝突(如果有的話)
  • 編譯
  • 測試
  • 檢查與一個diff工具的更改,以確保一切看起來不錯
  • 提交回主線
0

看看svnmerge;它會跟蹤「我合併了什麼?我選擇了哪些合併?」你的工作的一部分,並依靠svn的「合併」命令來完成繁重的工作。

相關問題