2011-02-01 51 views
1

是否有一種首選方式來獲取git存儲庫並將其作爲新的(任意深度嵌套的)目錄導入到現有的Subversion存儲庫中,同時保持提交歷史?在維護歷史的同時將git項目導入Subversion版本庫的子目錄

舉例來說,如果我有一個顛覆回購具有以下(簡體)目錄結構:

backends 
backends/A 
backends/B 

,我一直工作在一個git回購新的後端C,我現在想添加git repo的內容以svn回購爲backends/C

我發現的大部分信息似乎都集中在導入頂層(通常是新創建的或其他空的svn回購)。

我目前的做法是使用下面的代碼片段從git的過濾分行手冊頁向下推動混帳回購協議的現有頂層到backends/C

git filter-branch --index-filter \ 
     'git ls-files -s | sed "s-\t\"*-&newsubdir/-" | 
       GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
         git update-index --index-info && 
     mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD 

然後使用git的svn和git底墊將文件導入svn回購。大多數人會這樣做,還是有一種「更好」的方式?

回答

2

如果你想讓所有的git repo被提交到svn子目錄,而不關心其他的svn repo沒有在git中顯示,那麼你可以將git-svn指向那個svn子目錄而不是主目錄DIR。

假設你給出的簡化的目錄結構實際上都是在trunk /中,那麼當設置git-svn時,你可以執行類似git svn init -Ttrunk/backends/C urlgit svn init --prefix=backends/C/ url的操作。這些不是確切的命令,所以一定要參考文檔,但我希望這可以讓你開始。

+0

在svn subdir中指向git-svn效果很好,謝謝。 – 2011-02-02 05:37:42