将git项目导入Subversion存储库的子目录,同时保留历史记录

时间:2011-02-01 02:14:31

标签: git git-svn

是否有一种首选的方法来获取git存储库并将其作为新的(任意深度嵌套的)目录导入现有的Subversion存储库,同时保持提交历史记录?

例如,如果我有一个带有以下(简化)目录结构的subversion repo:

backends
backends/A
backends/B

我在git repo中一直在研究一个新的后端C,我现在想把git repo的内容添加到svn repo中backends/C

我发现的大多数信息似乎都集中在顶级导入(通常是新创建的或其他空的svn repo)。

我目前的方法是使用git-filter-branch手册页中的以下代码段将git repo的现有顶层推送到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 rebase将文件导入svn repo。这是大多数人会这样做的,还是有“更好”的方式?

1 个答案:

答案 0 :(得分:2)

如果你想把所有的git repo提交到svn子目录并且不关心svn repo的其余部分没有出现在git中,你可以只指向那个svn subdir而不是主dir的git-svn

假设您作为示例提供的简化目录结构实际上都在trunk /中,那么在设置git-svn时,您会执行类似git svn init -Ttrunk/backends/C urlgit svn init --prefix=backends/C/ url的操作。这些不是确切的命令,所以一定要参考文档,但我希望这可以让你开始。