2011-03-31 160 views
5

我目前在Github上有一个关于我想要合并到项目中的项目。将SVN回购作为分支导入已有的Git回购

问题是,SVN项目本质上只是github上较大项目的一个文件夹,所以我不认为我可以使用git-svn来做到这一点。

我假设我可以使用git svn来克隆该项目,但后来我不知道如何将svn项目移植到现有的git项目上。

想要的结果是将SVN历史记录到Git分支中(而不是将其移植到主分支上)。

能够重新提交给svn并不是真的必要(如果有帮助的话)。

解决

我结束了使用just_doug的建议,但也有一些小的修改:

1:我以前从http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/的建议添加googlecode上作为远程裁判

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

3:我用

混帐合并-s我们--no提交googlecode上的远程

合并两个

4:然后我用

的git读树 - prefix = folder1/folder2/ -u googlecode-remote

在合并历史阅读和重订到所需的子文件夹

希望这可以帮助别人了类似的情况;)

回答

2

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

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

说明书假定遥控器也是一个git回购。如果本地回购是使用git而不是git-svn创建的,那么不知道它会发挥多好。这是一种混乱,但here are some scripts用于制作一个中间存储库,只是在git中镜像SVN回购。这样,你可以创建一个svn仓库的git-svn镜像,并将其作为远程镜像添加,上面的说明应该像描述的那样工作。