是否有一种首选的方法来获取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。这是大多数人会这样做的,还是有“更好”的方式?
答案 0 :(得分:2)
如果你想把所有的git repo提交到svn子目录并且不关心svn repo的其余部分没有出现在git中,你可以只指向那个svn subdir而不是主dir的git-svn
假设您作为示例提供的简化目录结构实际上都在trunk /中,那么在设置git-svn时,您会执行类似git svn init -Ttrunk/backends/C url
或git svn init --prefix=backends/C/ url
的操作。这些不是确切的命令,所以一定要参考文档,但我希望这可以让你开始。