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

将SVN存储库的一部分导入现有Git repo,git,svn,version-control,git-svn,svn2git,Git,Svn,Version Control,Git Svn,Svn2git,我有一个现有的SVN回购协议,我想将其中的一部分,连同历史一起导入现有的Git回购协议。有人能给我一个关于执行此操作所需命令的高级概述吗 总结: 我想移动现有SVN存储库中的一些子目录(但不是repo的其余部分) 我有一个现有的Git repo,我想将这些目录导入其中 我只想保留我移动的子目录的历史记录(而不是其他任何内容) 我有一种感觉,这涉及到git过滤器分支和一些奇怪的合并。任何帮助都将不胜感激。结果很复杂,但以下是我所做的 首先准备SVN存储库。后来我打算从SVN中删除这些文件,因此

我有一个现有的SVN回购协议,我想将其中的一部分,连同历史一起导入现有的Git回购协议。有人能给我一个关于执行此操作所需命令的高级概述吗

总结:

  • 我想移动现有SVN存储库中的一些子目录(但不是repo的其余部分)
  • 我有一个现有的Git repo,我想将这些目录导入其中
  • 我只想保留我移动的子目录的历史记录(而不是其他任何内容)

我有一种感觉,这涉及到git过滤器分支和一些奇怪的合并。任何帮助都将不胜感激。

结果很复杂,但以下是我所做的

  • 首先准备SVN存储库。后来我打算从SVN中删除这些文件,因此它有助于将所有文件放在一个目录中(这也使以后的
    过滤器分支
    更容易)

  • 使用git:
    git SVN clone签出了SVN repohttp://path/to/svnrepo
    。这将创建svn repo的git版本

  • 利用这篇SO文章中的思想,我使用
    过滤器分支--subdirectory filter
    来过滤我想要的目录,并从SVN中删除我不想保留在git中的其他内容的历史记录。您还可以使用新功能
    git子树
    ,如中所示

  • 然后,利用这篇文章中的想法,我将新的git repo导入到我想要添加到的父项目中。接受的答案不正确,请查看该页上的其他答案;您需要执行
    git远程添加git项目
    ,然后执行
    git拉动

  • 最后,将更改推送到git项目


  • 我认为导入完整的存储库可能更容易,然后使用
    git filter branch
    删除不想保留的内容。我不确定是否可以仅以这种方式导入
    svn
    存储库的一部分,即使可以,也不太可能是简单的…您可以使用
    svnadmin dump
    转储Subversion存储库,然后使用过滤掉你不想要的部分。对我有用,但使用git merge——允许不相关的历史源代码/主代码合并存储库(从这里找到)