2017-07-31 129 views
0

我們有一個SVN設置,分支合併經常發生。我目前正在遷移到git。我使用svn2git進行遷移,但我認爲git svn也適用。git svn克隆,合併信息丟失

看來svn git clone不會保留svn中的mergeinfo,因爲svn和git合併的結果工作方式不同嗎?例如,在dong git svn clone之後遷移一個svn trunk repositoy(帶或不帶特徵分支)。做git log --full-history將只顯示分支被合併到樹幹中的提交,但是該合併引入到樹幹中的分支內的所有提交歷史記錄不再存在,但是它在svn回購中顯示,如果使用TortoiseSVN並啓用「包括合併的撤銷「。似乎svn裏面的所有mergeinfo都沒有保留/複製到git master/trunk存儲庫中?它應該發生什麼?

我讀過那個SubGit可以處理的問題(我還沒有試過)。但只是想確保git svn clone確實不會保留git中svn repository的mergeinfo properties /信息。

+0

我已經看到'Git svn'生成的Git中已經合併了。 – Vampire

+0

合併是好的,只是歷史不會從合併的分支保留,例如,如果功能分支從主幹中的返回100分支出來,並且具有提交101-103,並且主幹在歸還104中合併回特徵分支,則在svn中,我可以看到101-104的反轉歷史記錄,但在git中,我只能看到反轉歷史記錄100和104,合併後特徵分支中101-103的歷史記錄在主幹中丟失。 –

+0

如果你只克隆樹幹,這可能是正確的。如果你也克隆了功能分支,你會得到你期望的結果。至少我得到了你所期待的。 – Vampire

回答

0

As @Vampire等人建議從其他地方和SO Q &作爲:git svn可能不是導入/轉換svn repos的最佳工具,我很確定它可以在某些情況下使用。但在邊緣情況下,對於我來說無論如何都不會有神祕感。

在我們的案例中,這是因爲出了非標準的回購結構,它具有共享的根級別幹線,併爲許多不同的應用程序分支。所以它的結構看起來像'trunk \ app1,app2,app3 ...'和'branches \ app1_feature1,app1_feature2,app2_feature,app3_feature1'。

最初我沒有導入任何分支,它沒有將分支中的合併信息帶入中繼。然後,我試圖將我需要的主幹和分支移動到與標準結構相同的svn回購中的不同位置,但git svn似乎並不滿意。之後,我嘗試了SubGit,因爲它似乎很容易入門,並且可以免費導入,但最初沒有成功,因爲它使用相同的移動中繼/分支。然後我嘗試使用SubGit導入整個「分支」,最後得到了一些合併的信息,但由於重命名/移動了主幹,仍然缺少一些早期版本信息。

最後我最終使用紅寶石寶石「svn2git」有以下評論:

svn2git https://svn-host/product --trunk trunk/application1 --branches branches 
    --no-minimize-url --notags --metadata --authors ../../authors.txt -v 

其作爲至少帶來了最新的合併信息回來,作爲一個快速的樣子,似乎擁有所有從主幹的修訂即使重新命名/移動舊分支,因爲新的中繼線。但是轉換花了很長時間,我必須讓它在一夜之間運行,並且將來自其他應用程序的所有不必要的分支帶入我的git克隆。

注意:對於我用於svn2git的評論,後來我意識到'--branches'參數可以省略,因爲'branches'是默認值。

+0

由於您使用的'svn2git'基於'git-svn',它當然需要很長的時間,您從我的其他答案中肯定知道。 :-)過夜是一個很好的持續時間,因爲我們的工作存儲庫新鮮克隆將需要一個星期。如果你想使用KDE'svn2git',轉換很可能會在1〜2小時內完成,你可以很容易地適應了以* *任何佈局。 ;-) – Vampire

+0

1-2小時,所以它就像你的情況加速100倍!對我來說,它只是看起來像KDE'svn2git'有點難以起步,但另一方面,我剛開始只能轉換一個應用程序,我目前記錄我是如何做到的轉換,所以我刨看在KDE'svn2git'上。 –

+0

我說「如果*你*會使用」。我不認爲我們的速度會那麼快,我還沒有嘗試過。是的,這肯定很難開始,但它絕對是值得的。 – Vampire