如何将SVN仓库的一部分导入现有的git仓库,保留历史记录?

时间:2014-08-22 18:21:38

标签: git svn migration git-svn

我有一个旧的SVN存储库,其中包含我要导入现有 git存储库的文件的子目录,保留历史记录。怎么办呢?

假设我有现有的SVN布局:

file:///svn
  trunk
    foo
    bar
  branches

以下git布局:

file:///git
  *master
    baz
    qux

我想将svn:///file/trunk/foo导入git,以便我得到以下结果:

file:///git
  *master
    foo
    baz
    qux

1 个答案:

答案 0 :(得分:0)

我发现的解决方案需要使用git-subtree,它包含在git contrib中,或者在某些情况下使用默认的git安装(例如使用git Debian软件包1.9及更高版本)。

  1. 使用git-svn克隆SVN repo:

    git svn clone -r 1540:HEAD \
        --authors-file=authors.txt \
        https://svn.host.com/repos/trunk/foo foo
    
  2. 然后在你的主仓库中,创建一个新的分支(我认为是可选的),并使用git-subtree导入新的部分仓库:

    git checkout -b foo
    git subtree add --prefix foo /path/to/foo master