【问题标题】:How do I merge a bugfix from a maintenance branch back to trunk in subversion如何在颠覆中将维护分支中的错误修复合并回主干
【发布时间】:2012-09-20 14:58:35
【问题描述】:

在 svn 的书 (http://svnbook.red-bean.com/en/1.7/svn.branchmerge.commonpatterns.html) 中,在 Common Branching Patterns 部分中,它说:

主干被复制到“发布”分支。当团队认为 软件已准备好发布(例如,1.0 版本),/trunk 可能是 复制到 /branches/1.0。

团队继续并行工作。一个团队开始严格测试 发布分支,而另一个团队继续新工作(例如,对于 2.0 版)在 /trunk 上。如果在任一位置发现错误, 根据需要来回移植修复程序。然而,在某些时候, 即使那个过程停止了。分支被“冻结”以进行最终测试 就在发布之前。

(强调我的)。我假设维护分支与发布分支相同..? (在我们开发下一个版本时,我们需要让一位客户使用之前的版本)。

我很确定我不应该使用--reintegrate,但我不太确定如何以不会弄乱未来合并的方式进行合并。我是否需要手动跟踪修订范围? ..或者颠覆会为我做这件事(我使用的是 1.7.6 版)。

[编辑:更多细节]

trunk> svn mkdir c
trunk> touch a.txt b.txt c\d.txt
trunk> svn add a.txt b.txt c\d.txt
trunk> svn ci -m "initial trunk"
...
Committed revision 9580.

trunk> svn copy .../trunk .../branches/branch1 -m "create maint branch"
Comitted revision 9581.

trunk> svn rm c\d.txt
trunk> svn ci -m "Fix bug-1."
Deleting       c\d.txt

Committed revision 9582.

branch1> svn merge .../trunk
--- Merging r9581 through r9582 into '.':
D    c\d.txt
--- Recording mergeinfo for merge of r9581 through r9582 into '.':
 U   .

branch1> svn ci -m "Merged fix for bug-1 from trunk."
Deleting       c\d.txt
Committed revision 9583.

branch1> svn propget svn:mergeinfo .
/svntests/trunk:9581-9582

trunk> svn up
Updating '.':
At revision 9583.

[原问题]

trunk> svn merge .../branches/branch1
--- Merging r9581 through r9583 into '.':
   C c\d.txt
--- Recording mergeinfo for merge of r9581 through r9583 into '.':
 U   .
Summary of conflicts:
  Tree conflicts: 1

[来自@JB Nizet 的修复]

trunk> svn merge -c 9583 --record-only .../branch1
--- Recording mergeinfo for merge of r9583 into '.':
 U   .

trunk> svn propget svn:mergeinfo .
/svntests/branches/branch1:9583

然后,来自维护分支的未来合并将起作用(正确更新主干上的合并信息)而不会产生冲突:

trunk> svn merge .../branch1

【问题讨论】:

    标签: svn merge


    【解决方案1】:

    发布分支用于准备发布的最后步骤。发布完成后,维护分支用于修复错误。它们都是分支,纯粹是语义上的区别,但还是有区别的。

    要合并您的错误修复,您只需确保您的工作副本指向主干(目标分支),然后从维护分支(或维护分支的修订范围,如果您不希望所有内容合并) ):

    svn merge url_of_the_maintenance_branch
    

    下一次合并会记住这些修订已经合并到主干,并会自动跳过它们。

    【讨论】:

    • 我已经使用该方法将 bug 修复从主干合并到维护分支,但是当我尝试从维护分支合并回主干时,我会遇到大量具有已在主干上删除(但未在维护分支上修改)..
    • 那么您不应该将这些错误修复合并回主干,因为它们已经在主干中。将这些特定修订与--record-only 合并以将它们标记为已合并,以便整个分支的后续合并忽略它们。
    • 我在问题中添加了更多细节。我不确定我需要在哪里添加--record-only
    • 我建议使用--record-only 选项将修订版9583(从主干到分支合并创建的修订版)从一个分支合并到另一个主干。这意味着:此修订来自主干,因此无需将其重新应用到主干,因此我们将其标记为已合并而不实际合并它。完成后,您可以将整个分支合并到主干,并且修订版 9583 不会被合并,因为它在合并信息中被标记为已合并。这样你就可以避免树冲突。
    • 谢谢。我已经更新了问题以反映您的答案(似乎我必须等待大约 13 小时才能获得赏金......)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多