2009-07-20 67 views
6

此問題與this onethis one類似,但情況稍微複雜一些。git-svn如何與svn版本庫改變佈局?

幾年前我開始使用私人svn存儲庫(我主要用於共享配置文件之類的各種機器之間)。我並不太在意倉庫的佈局(分支,去哪等),所以它隨着時間的推移發生了很大的變化。這當然是一個錯誤,但現在已經太晚了。最近,我已經將它遷移到更標準的svn trunk/branches/tags佈局,主要是使用svn move命令,但是舊的歷史記錄當然仍然存在於存儲庫中(坦率地說,這有點亂) 。

我現在想永久地將其轉換爲git存儲庫。我嘗試過使用git-svn,但它似乎只處理遵循一致的trunk /分支/標記約定的情況(是的,你可以提供其他名稱,但每個只有一個,它就會出現)。我的存儲庫的很多歷史記錄都有效地存儲在存儲庫的根目錄中,例如,標記爲/和分支/爲子目錄。

處理所有這些問題的最佳方法是什麼?理想情況下,我希望git倉庫最終能夠以某種方式訪問​​所有歷史記錄,即使分支和標記在git中沒有正確表示爲第一級概念。

更具體地說,svn-git如何處理它所提供的trunk/branches/tags子目錄之外的文件?到目前爲止,我的觀察結果是,它有時會錯過它們(絕對不行),有時會將它們添加到新的存儲庫中。

任何想法將不勝感激。

+0

你問它會如何表現,也說你已經試過了。您觀察到的不良行爲的具體示例會很有幫助。 Git通常非常善於處理複雜的合併,例如,在同一提交中更改和移動子樹。 – 2009-07-20 18:26:48

回答

2

根據我的經驗,處理此問題的唯一方法是隨時跟蹤存儲庫的位置,併爲項目在一個位置保留的每個時期分別創建一個git-svn-clone。

在您爲不同階段及時創建存儲庫(或者至少在可能困擾的時候),可以將存儲庫移植到一起。

我創建了一個截屏在這裏展示這種技術:

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html