【问题标题】:Merging missed changes in Subversion合并 Subversion 中丢失的更改
【发布时间】:2009-02-20 19:12:45
【问题描述】:

我的开发团队遵循 Subversion 中不稳定的主干、稳定的分支模式。每个月,都会从主干创建一个稳定的发布分支。有时,需要将更改从这些发布分支合并到后续发布分支,并最终合并到主干。

问题在于,在过去的几个月里,所有这些分支的合并都不正确。由于开发人员误解了他们需要合并哪些修订,许多修订被跳过。

不正确的合并历史示例如下所示:


------------------------------------------------------------------------
r57 | Bob | 2008-11-27 04:02:46 -0600 (Thu, 27 Nov 2008) | 1 line

action:merge; origin:branches/1; target:branches/2; range:28-55
------------------------------------------------------------------------
r28 | Alice | 2008-11-25 10:14:00 -0600 (Tue, 25 Nov 2008) | 1 line

action:merge; origin:branches/1; target:branches/2; range:10-25

在这里,Bob 应该从 r25(Alice 的合并结束)开始他的合并,而不是 r28。

所以现在我有 6 个分支自 10 月初以来以这种方式错误地合并。这会导致主干中的测试失败和许多回归。所以现在,我想返回并合并所有错过的更改。

有没有一种简单且正确的方法来做到这一点?我目前的计划是回到起点,开始在每个间隙中合并。因此,在示例中,我会将修订版 25-28 从分支 1 合并到分支 2。但我预计会有很多冲突,我希望有更好的方法。

确实没有快速简便的解决方法。强制开发人员在 Subversion 中维护多个并发分支是容易出错且耗时的。在这种情况下,许多开发人员的 checkin cmets 无论如何都是不准确的。所以真的没有办法回去追溯他们的脚步。相反,我们将全面测试最近的分支并关闭其余分支。

【问题讨论】:

  • 这听起来确实是一个可怕的政策,而且容易出错。我一直试图坚持“仅在必要时和尽可能晚的分支”的概念。我确定我遗漏了一些东西,只是没有遇到按你的方式做的需要,但对我来说,这听起来像是在招惹麻烦。

标签: svn merge


【解决方案1】:

如果开发人员一路检查他们在分支中的更改,您不能在合并之前创建一个新分支,正确合并更改,然后合并他们的新代码吗?也许我错过了什么。

我不熟悉各种 Subversion 模式,但我的公司遵循的流程是我们的主干始终稳定,开发人员无法更改它(只能更改分支)。因此,我们从未遇到过合并问题,我们在 SVN 中有超过 10,000 个修订版和 100 个分支。我之所以提出这个问题,是因为如果有多个开发人员遇到合并问题,听起来您的流程/模式存在重大缺陷。

【讨论】:

  • 我们刚刚就两种不同的分支技术进行了几次讨论。我不得不说他们各有优点和问题。与其他源代码控制软件合作后,我认为 Subversion 可以做得更好,但我不确定如何。
【解决方案2】:

好吧,要获得所有内容,您只需合并到 URL 即可,无需特定修订。如:

cd /path/to/working/copy/of/stable/brunch
svn merge https://company.com/repo/project/branch/stable https://company.com/repo/project/trunk

这样你就可以从trunk中得到你忘记合并到stable中的所有东西。查看、还原您不需要的内容并提交。

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多