2011-02-01 27 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

相关问题