将非标准Subversion存储库转换为git

时间:2009-02-12 04:57:25

标签: svn git migrate

我有一个存储库,其布局如下:

    trunk/
        projectA
        projectB
    branches/
        projectA-1.0
        projectB-1.0
    tags/
        projectA-1.0.1
        projectB-1.0.1

我想将它们转换为单独的git存储库,其中trunk / projectA作为顶级目录,所有它的分支作为git branches。

每当我尝试指定类似git svn init的{​​{1}}时,后续git svn init -T trunk/projectA -b branches -t tags http://svn.example.com就会在不同版本上神秘失败。有时它会一直到200,有时会停止。

我目前的想法是,我应该创建一个git存储库,它将整个subversion存储库镜像为一个单独的实体,每个项目都有子目录。然后我会使用git svn fetch将子目录重写为项目的根目录。

但是,我不确定如何使用git-filter-branch和。{/ p>让分支表现得像我想要的那样。

同样最理想的是为每个项目的“主干”创建一个具有不同分支的单个git仓库,在这种情况下我没有问题没有真正的主人。

2 个答案:

答案 0 :(得分:5)

您是否考虑 svn2git 将svn导入git存储库?

它比git svn clone好,因为如果你在svn中有这个代码:

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svn 将通过提交历史记录来构建新的git repo。
将所有分支和标签导入为远程svn分支,而你真正想要的是git-native本地分支和git标记对象
因此,在导入此项目后,您将获得:

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

在你的项目完成svn2git之后,你会得到这个:

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

最后,它确保master的HEAD与svn repo的当前主干相同。

所以在你的情况下,它会给你实际的git分支来应用git-filter-branch

答案 1 :(得分:0)

我最终做的是克隆存储库的根目录并为每个项目复制新的git repo并重新安排事情。它不干净或漂亮,但它是遗留代码,我不再需要经常查看。