【问题标题】:Is it possible to migrate from subversion to git keeping history of copied branches, tags and trunk?是否可以从 subversion 迁移到 git,保留复制的分支、标签和主干的历史记录?
【发布时间】:2013-07-18 18:52:36
【问题描述】:

我已经看到许多关于此的 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 将能够找到从中复制目录的父目录。

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

【问题讨论】:

    标签: git svn migration history


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这是我所做的完美无瑕的工作:(请参阅http://svnrating.com/svn-to-git-migration/)

        首先,为 svn 初始化一个新的仓库到 git 迁移 $ mkdir 迁移 $ cd 迁移 $ git svn init --stdlayout --prefix=svn/

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          • 2010-10-16
          • 2015-03-03
          相关资源
          最近更新 更多