将SVN Repo作为分支导入到现有的Git仓库中

时间:2011-03-31 12:35:38

标签: svn git git-svn

我目前有一个谷歌代码项目,我想将其合并到Github上的一个项目中。

问题是SVN项目基本上只是github上较大项目的文件夹,所以我认为我不能只使用git-svn。

我假设我可以使用git svn克隆项目,但后来我不确定如何将svn项目正确地移植到现有的git项目中。

期望的结果是将SVN历史记录转换为Git分支(不将其移植到master上)。

能够拒绝回到svn并不是必要的(如果有帮助的话)。

解决

我最终使用了just_doug的建议,但稍作修改:

1:我使用http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/中的建议将googlecode添加为远程参考

2:我为我想要的远程分支创建了一个新的分支

3:我用过

  

git merge -s ours --no-commit googlecode-remote

合并两个

4:然后我用

  

git read-tree --prefix = folder1 / folder2 / -u googlecode-remote

读取合并历史记录并将其重新绑定到所需的子文件夹

希望这可以帮助处于类似情况的人;)

1 个答案:

答案 0 :(得分:2)

我之前没有使用它,但听起来你想要the subtree merge strategyThis article有关于如何使用它的更多细节。

基本上,您将SVN存储库添加为远程,然后使用git read-tree命令将其“移植”为纯git存储库的子目录。根据您希望历史记录显示的方式,您可以git merge -s subtree将其合并到pure-git分支(保留git-svn提交),也可以按照第二个链接中的步骤添加{ {1}}和--squash标志并将合并显示为pure-git分支中的单个提交。

说明假设遥控器也是一个git repo。如果使用git而不是git-svn创建本地存储库,则不确定它将如何发挥作用。它是一种kludge,但here are some scripts用于创建一个仅在git中镜像SVN repo的中间存储库。这样,您可以制作svn repo的git-svn镜像,并将其添加为遥控器,上面的说明应该如上所述。