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

5
我有一个单一的SVN仓库,其当前结构如下:
  • project1
    • branches
    • trunk
    • tags
  • project2
    • branches
    • trunk
    • tags
最初的结构如下:
  • project
    • branches
    • trunk
      • proj1
      • proj2
    • tags
也就是说,该项目被拆分成了两个单独的“子仓库”(或者你想叫它什么都可以)。
是否有任何方法将其迁移到git而不会丢失历史记录?对于这种情况,svn2git是否比git-svn更好?是否有其他迁移工具可用?
编辑:我尝试了建议的git svn clone,但正如我所想的那样,它没有跟随从旧结构到新结构的移动。它只导入了新结构的修订版本。

如果git-svn无法理解你已经搞砸了创建当前结构的旧结构,那是因为git-svn确实会跟踪历史到第一个修订版本。 - Bombe
@Bombe:是的,我也是这么想的...我想我有一个解决方法,如果有效的话,我会在这里发布的。 - Mauricio Scheffer
5个回答

3

首先我把主干转换成了git:

git svn clone url-to-project -s

然后我转换了每个项目:
git svn clone url-to-project1 -s
git svn clone url-to-project2 -s
...

然后,针对每个项目,我使用嫁接和filter-branch附加了来自主干的先前历史。

我刚刚写了一篇博客介绍它。


1

svn2git 实际上只是在 "git svn" 的基础上操作,所以它本身并不会 "更好"。它只是将标签和分支优化,为从 svn 中干净地切换做好准备工作。如果这正是你想要的,那么我建议你分别在两个子仓库上使用它。这样可以获取所有相应的历史记录。


不知道svn2git使用了git-svn...然而git-svn没有跟随从旧结构到新结构的移动 :-( - Mauricio Scheffer

0

你已经尝试过内置的了吗?

git svn clone

git-svn

-->

{{链接1:Git-svn}}


没有跟上从旧结构到新结构的变化 :-( - Mauricio Scheffer

0

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

不需要告诉Git关于在主干目录下有多个项目的先前结构。

Git的好处是你可以尝试迁移多次,直到你对结果满意为止。


git-svn 没有跟随从旧结构到新结构的移动 :-( - Mauricio Scheffer

0

使用 git svn clone -s SVN_REPOS 命令,让 git 克隆 Subversion 仓库并假设标准的 Subversion 布局。你将得到一个名为 master 的本地 git 分支,但是 git branch -a 命令会显示所有远程分支。Subversion 分支只有分支名称,但标签将具有 tags/tag_name 的分支名称。

在本地克隆时,请勿重复使用分支/标签名称!git 不喜欢这样做。

这个指南对我帮助很大。

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


1
它没有遵循从旧结构到新结构的迁移 :-( - Mauricio Scheffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接