2010-03-29 24 views
5

我的團隊使用SVN進行源代碼管理。最近,我一直在從樹幹偶爾合併,這是一個相當惱人的經歷(比較Joel Spolsky的"Subversion Story #1"),所以我一直在尋找替代方法來管理分支和合並。鑑於中央SVN存儲庫是不可協商的,我想要的是一組滿足以下條件的工具。在SVN中維護分支機構的工具

  1. 完整的修訂歷史應該存儲在SVN中,用於中繼線和分支。

  2. 在任一方向(可能縱橫交錯)合併應該是相對無痛的。

  3. 合併歷史應儘可能存儲在SVN中。

我已經看了兩個git-svnbzr-svn既不似乎是勝任工作—基本上,考慮到修訂歷史記錄,他們可以從SVN倉庫的出口,他們似乎無法做任何好作業處理合並比SVN可以。例如,在使用git克隆版本庫之後,我的分支的修訂歷史記錄顯示原始分支脫離中繼線,但git沒有「看到」任何臨時SVN合併爲「原生」合併—修訂歷史記錄爲一長線。因此,任何試圖從git中彙總幹線的嘗試都會產生與SVN合併一樣多的衝突。 (此外,git-svn documentation明確警告不要使用git到部門之間的合併。)

是否有辦法來調整我的工作流程,讓git滿足上述要求?也許我只需要提示或技巧(或單獨的合併工具?)來幫助SVN更好地融入分支機構?

+0

聽起來像你真的需要說服你的團隊使用git。 :P – Amber 2010-03-29 05:22:11

+2

我認爲,不幸的是,你面對SVN僅僅限於合併分支的能力這一事實 - 只要你的中央回購是一個SVN回購,那麼任何數量的git魔法都很難拯救你。我當然很好奇,看看有沒有好的工作雜誌! – Cascabel 2010-03-29 05:23:00

回答

2

而無需純SVN的答案,我想指SO問題「How to fool git-svn to recognize merges made with svn?

我建議做那些蠢貨,一個特殊分支合併,但一個簡單的解決辦法是記錄(至少最近的)SVN合併與git grafts filegit-svn克隆回購,以改造:

o-...-A---o---D--- unstable 
/  
X-----B---M---o---o--- stable 

到:

o-...-A---o---D--- unstable 
/  \ 
X-----B---M---o---o--- stable 

,在dcommit並將其發送回SVN之前,緩解git合併過程。

+0

移植文件似乎幫助了很多,謝謝!從trunk中最後一次合併添加一個移植似乎就足夠了。是對的嗎?你建議使用'git merge --squash'從SVN中隱藏真正的DAG嗎?另外,我想知道這個滿足#3(儘管我不確定mergeinfo對SVN有多大價值)。 – 2010-03-29 13:25:54

+0

@Chris:在閱讀http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase後,我不認爲是「合併壁球」在這裏是必要的。 SVN可以使用DAG在'dcommit'期間記錄一些'mergeinfo'元數據。 – VonC 2010-03-29 16:29:57