是否有可能从subversion迁移到git,保留复制的分支,标签和主干的历史记录?

时间:2013-07-18 18:52:36

标签: git svn migration history

我看过很多有关此问题的SO帖子,没有解决方案。

我有一个subversion存储库,托管多个项目。我想将其中一个项目迁移到git,同时保留包含分支,标记和主干副本的历史记录。

这个项目最初有结构:

root/
   dir/
      mod1/
         trunk/
         branches/
         tags/
      mod2/
         trunk/
         branches/
         tags/
      ...

最初这些项目是作为独立项目开发的,但事实证明它们比我们原先想象的更相关,我们决定通过将所有单独的主干,分支和标签目录复制到dir/下面来进行重新组织。看起来像:

root/
   dir/
      trunk/
         mod1/
         mod2/
         ...
      branches/
      tags/

我的git svn clone看起来像是:

git svn clone --no-metadata <svn_url>/root/dir -s git-svn-clone

完成后我按照this清理我的分支和标签,但是当我执行git log时,我只看到从分支/标签/主干开始的时间点开始的历史记录复制在svn。

我已经尝试git log --follow但这不起作用。我尝试了-M -C and --find-copies-harder选项,它们都表现出同样的效果。

我认为通过确保克隆所有分支,标签和中继,git可以找到复制目录的父项。

我想要的是根本不可能吗?没有历史可能不是世界上最糟糕的事情,但它会很好。

3 个答案:

答案 0 :(得分:2)

您可以使用我用于将本地subversion存储库迁移到git的subgit

答案 1 :(得分:0)

不幸的是,没有解决这个问题的解决方案(至少我不知道)。在这种情况下,我总是从根目录的git svn克隆开始,之后再进行git fast-export --no-data。然后我编写了一个脚本,它将所有svn分支转换为git分支,并使用该脚本生成一个fas-import文件,该文件又创建了git历史记录。

主要的问题是svn合并很容易被忽略(也取决于它们是否正确记录在svn中),合并看起来像是integratin分支中的一个大提交,而原始分支“在空中结束” ”

答案 2 :(得分:0)

以下是我所做的完美无瑕的工作:(见http://svnrating.com/svn-to-git-migration/

首先,初始化svn到git迁移的新存储库     $ mkdir迁移     $ cd迁移     $ git svn init --stdlayout --prefix = svn /

接下来,获取svn存储库     $ git svn fetch

如果存储库很大,这可能需要一段时间。完成后,您可以将刚刚创建的存储库推送到远程或本地使用。