Svn - > git迁移与几个主干/分支/标签

时间:2009-10-08 21:07:20

标签: svn git git-svn

我有一个SVN存储库,其中包含以下当前结构:

  • PROJECT1
    • 分支
    • 躯干
    • 标记
  • 项目2
    • 分支
    • 躯干
    • 标记

最初具有此结构:

  • 项目
    • 分支
    • 躯干
      • proj1
      • proj2
    • 标记

也就是说,该项目被分成两个独立的“子存储库”(或者你想称之为的任何一个)

有没有办法将其迁移到git 而不会丢失历史记录? 对于这种情况,svn2git会比git-svn更好吗?还有其他迁移工具吗?

编辑:我按照建议尝试了git svn clone,但是,正如我想的那样,它没有按照从旧结构迁移到新结构。它只导入了新结构的修订版。

5 个答案:

答案 0 :(得分:3)

首先我将主干转换为git:

git svn clone url-to-project -s

然后我转换了每个项目:

git svn clone url-to-project1 -s
git svn clone url-to-project2 -s
...

然后,对于每个项目,我使用移植物和过滤器分支从主干附加了以前的历史记录。

我只是blogged about it

答案 1 :(得分:1)

svn2git只是在下面使用“git svn”,所以它本身不会“更好”。它只是制作漂亮的标签和分支,并清理干净的svn。如果这就是你想要的,我会继续单独在两个子存储库上使用它。它将获得所有适当的历史记录。

答案 2 :(得分:0)

您是否已尝试内置

git svn clone

git-svn

答案 3 :(得分:0)

您的“当前”结构已经包含了之前结构的所有历史记录。因此,使用git svn clone克隆每个项目应该可以正常工作。

没有必要告诉Git有关在trunk目录下有多个项目的先前结构。

Git的优点在于,您可以根据自己的喜好尝试迁移,直到您对结果感到满意为止。

答案 4 :(得分:0)

使用git svn clone -s SVN_REPOS假设标准的Subversion布局让git克隆Subversion存储库。您将获得一个名为master的本地git分支,但git branch -a将显示所有远程分支。 Subversion分支只有分支名称,但标记的分支名称为tags/tag_name

在本地克隆时不要重复使用分支/标记名称! git不喜欢那样。

本指南对我帮助很大。

http://www.viget.com/extend/effectively-using-git-with-subversion/