2012-05-05 47 views
2

我想轉換一個稍微凌亂的svn倉庫git。我嘗試閱讀一些指南和其他SO問題,但在遵循最佳方法方面有點失落。轉換凌亂的svn存儲庫爲git

的SVN倉庫有一個頂層文件夾結構,文件夾,是這樣的:

|- client 
|- server 
|- website 
|- misc 

大多數這些文件夾中有「標準」的svn結構:即trunkbranchestags。但有些只是平面文件夾。

|- client 
    |- trunk 
    |- branches 
    |- tags 
|- server 
    |- trunk 
    |- branches 
    |- tags 
|- website 
|- misc 

分支和標籤可能在不同文件夾之間具有相同的名稱。例如,客戶端和服務器文件夾都可能有一個名爲1.0的分支。

我設法使用svn2git單個文件夾進行轉換,而且似乎對歷史,以及優良的分支機構。我可以設法爲每個文件夾創建一個單獨的git存儲庫。但是,我想最終保留一切存儲在一個存儲庫

什麼是這些文件夾中(現在的git倉庫)合併爲一個,同時保持每個文件夾的分支,標籤和歷史上最好的方法是什麼?使用this approach,我似乎失去了提交歷史記錄和來自合併存儲庫的分支......或許我只是錯過了一些重要步驟或做錯了什麼?

否則,也許使用svn2git每個文件夾分別是不是從SVN遷移到Git的最好的方法?

回答

1

我最終還是選擇了上this answer的辦法。

本質:

  • 建立在SVN庫中的每個子文件夾(使用svn2git)
  • 創建一個新的Git倉庫合併所有庫一個Git項目爲
  • 將每個項目(包括所有分支)作爲遠程:

    git remote add alpha <url/path-to-alpha-repo> 
    git remote add bravo <url/path-to-bravo-repo> 
    git remote add charlie <url/path-to-charlie-repo> 
    for r in $(git remote); do 
        git config remote.$r.fetch \ 
        "$(git config remote.$r.fetch | sed -e 's.remotes.heads/all.')" 
        git config --add remote.$r.fetch \ 
        "$(git config remote.$r.fetch | sed -e 's.heads.tags.g')" 
        git config remote.$r.tagopt --no-tags 
    done 
    git remote update 
    
  • 將合併存儲庫推送到遠程回購(從現在開始,這將是'官方'倉庫)。

0

我會重寫svn庫下面的結構之前轉換爲混帳:

- trunk 
    |-client 
    |-server 
    |-website 
    `-misc 
- branches 
    |-client 
    |-server 
    |-website 
    `-misc 
- tags 
    |-client 
    |-server 
    |-website 
    `-misc 

調整你的svn庫,你必須svnadmin dump庫到一個文件中,更新所有路徑該文件,然後svnadmin load更新的轉儲文件放入新的存儲庫。

看一看轉儲文件的結構 - 實際的重組可以使用支持查找/替換的編輯器輕鬆完成。它需要是二進制安全的,儘管除了ascii元數據外,轉儲文件還包含原始二進制數據(存儲庫中的二進制文件)。

+0

謝謝。聽起來像一個有趣的方法,但你是否知道任何資源/工具來幫助安全地做到這一點?我快速查看了一個svn轉儲,我不知道該從哪裏開始(更不用說處理合並問題,例如,客戶端和服務器名稱相同的兩個分支...) – gingerlime

+1

http:// svn。 apache.org/repos/asf/subversion/trunk/notes/dump-load-format.txt - 在轉儲文件中搜索「節點路徑」。如果您執行了複製/移動操作,則「Node-copyfrom-path」也可能是相關的。 – ThiefMaster

+0

這東西似乎超過了我的頭,是非常誠實的......做一些正則表達式搜索/替換如此大規模的svn內部轉儲格式的混亂並不完全是我所希望的解決方案。感謝您提出這個方向! – gingerlime