将SVN存储库的一部分导入现有的Git存储库

时间:2013-01-21 20:32:46

标签: git svn version-control git-svn svn2git

我有一个现有的SVN回购,我想将其中的一部分导入历史记录到现有的Git仓库中。任何人都可以给我一个关于执行此操作所需命令的高级概述吗?

要点:

  • 我想移动现有SVN存储库中的一些子目录(但不包括其余的存储库)
  • 我有一个现有的Git仓库,我想将这些目录导入
  • 我想保留我移动的子目录(但不是其他任何东西)的历史

我有一种感觉,这涉及git filter-branch和一些奇怪的合并。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:9)

事实证明这很复杂,但这就是我所做的。

  1. 首先准备SVN存储库。我之后打算从SVN删除文件,因此它有助于将所有文件放在一个目录中(这也使得filter-branch以后更容易。)

  2. 使用git:git svn clone http://path/to/svnrepo检出SVN仓库。这会创建一个svn repo的git版本。

  3. 使用此SO帖子Detach (move) subdirectory into separate Git repository中的提示,我使用filter-branch --subdirectory-filter来过滤我想要的目录,并从SVN中删除其他我不想要的内容的历史记录保持git。您还可以使用git subtree这一新功能,如Howto extract a git subdirectory and make a submodule out of it?

  4. 然后,使用此SO帖子How do you merge two Git repositories?中的想法,我将新的git repo导入到我想要添加到其中的父项目中。接受的答案不正确,请查看该页面上的其他答案;您想要git remote add git-proj <path>后跟git pull

  5. 最后,将更改推送到git项目。