Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Migration 从SVN迁移到GIT时;主干“;已经改变了好几次_Migration_Git Svn - Fatal编程技术网

Migration 从SVN迁移到GIT时;主干“;已经改变了好几次

Migration 从SVN迁移到GIT时;主干“;已经改变了好几次,migration,git-svn,Migration,Git Svn,TLDR由于传统SVN存储库中的分支实践往往低于标准,因此我们希望表示为“主”的历史记录保存在SVN中的一个目录中,该目录已多次更改名称。如何使git svn正确跟踪此历史 我们有一个非常古老(可以追溯到2005年)的SVN存储库,它在过去看到了相当多的糟糕做法。现在我们正在尝试迁移到git。当然,我们希望尽可能多地保留有意义的SVN历史 我们当前的工作流程应该相当简单地映射到传统的git工作流。我们基本上维护一个永久的“主干”分支,以及(通常)两个发布分支——一个是当前版本,另一个是即将发布

TLDR由于传统SVN存储库中的分支实践往往低于标准,因此我们希望表示为“主”的历史记录保存在SVN中的一个目录中,该目录已多次更改名称。如何使git svn正确跟踪此历史


我们有一个非常古老(可以追溯到2005年)的SVN存储库,它在过去看到了相当多的糟糕做法。现在我们正在尝试迁移到git。当然,我们希望尽可能多地保留有意义的SVN历史

我们当前的工作流程应该相当简单地映射到传统的git工作流。我们基本上维护一个永久的“主干”分支,以及(通常)两个发布分支——一个是当前版本,另一个是即将发布的版本。新提交被添加到主干(通常是在特性分支中生活了一段时间之后),然后当它们被认为“准备就绪”时,它们被合并到即将发布的分支(或者如果是适当的错误修复,也可以合并到当前发布分支)

因此,Bug 1234被提交到
trunk
,然后合并到
5.4
(即将发布的分支)并可能合并到
5.3
(当前发布的分支)。原则上,没有任何东西可以直接合并到5.4或5.4中

最终,5.4将被发布,分支到5.5分支,工作将一如既往地继续

Bug 3456将被提交到
trunk
,然后合并到
5.5
,并可能合并到
5.4
<代码>5.3此时已失效

将其映射到公共应用程序应该相当直接

5.3
变为
master
5.4
变为
develope
,而
trunk
中的任何突出部分都会移动到功能分支,在准备就绪后立即合并到新的
develope
(旧的
5.4

然而,在我们的SVN历史中,事情变得复杂了,因为我们并不总是使用这个工作流

我们过去常常把所有的事情都交给主干,然后偶尔分支去做发布的稳定工作

Bug 1234将被提交到trunk,然后,最终,trunk将被分叉到5.4。稳定工作将在5.4完成,并合并回主干。最终5.4将被“发布”

所有这一切意味着,在我们的SVN历史上,应该被视为“大师”和“发展”的东西已经发生了变化

应该成为“大师”的当前名称是“5.4”。几个月前,它被称为“5.3”,在此之前被称为“5.2”,在此之前被称为“主干”

在“master”的各种重命名之后,有没有办法迁移这个SVN历史(现在忽略标记和分支)

相关重命名/分支机构的简要历史,按时间倒序排列:

  • 目前,
    dc/5.3/
    是应该成为“主目录”的目录
  • dc/5.2/
    分支为
    dc/5.3/
    ;在此之前,dc/5.2的历史应该反映在“master”中
  • dc/trunk/
    分支为
    dc/5.2/
    ;在此之前,dc/trunk的历史应该反映在“master”中
  • trunk/
    被重命名为
    dc/trunk/
    ;在此之前,trunk的历史应该反映在“master”中

    • 最简单的方法是转储回购协议,过滤有问题的名称,使其返回到“trunk”,然后导入它


      您还可以转储相关修订并将其导入到新的回购协议中,保留分支和标记的一些历史记录,而不在其间进行所有单独的提交。一般来说,我认为你不会错过古老的承诺。

      我想,把回购协议倒进git吧?我在哪里可以使用,比如说git过滤器分支?关于不错过古代历史,你可能是对的。除非证明这很容易,否则我们很可能会追溯到历史上第一次重命名发生的时间。不,转储/过滤/加载到新的svn repo中,然后在满意它的状态后导入git。