How should merges be performed in SVN
我对SVN合并过程有疑问。
我在branch1中进行了一些文件修改,我想将这些更改合并到branch2,branch3和trunk中。
应该从branch1-> branch2然后是branch2-> branch3,最后是branch3-> trunk吗?
或
应该从branch1->(branch2,branch3和trunk)完成合并吗?
- 要回答这个问题,您将需要提供有关每个分支的祖先的信息。是所有分支都摘除树干还是其他分支摘掉了?
-
所有的树枝都是用树干做成的
当您合并SVN中的两个(任意)节点(以及其他(可能不是全部)/ SCM)时,在大多数情况下,目标将从历史的分歧点开始从源头获取所有更改
因此,如果只想填充从branch1到其他节点的更改,则可以
-
对具有相同源的N个目标执行" complete "合并(读取svn help merge,第一种形式)N次-分支1(在检查历史记录的方式中,大多数逻辑和可读性更高)
-
执行" complete "合并为一个(任何)目标,将此合并集用作其他目标" cherry-pick "合并的源(它将起作用,将给出相同的结果,但似乎是逻辑上的解决方案)
PS-" complete "与可变源合并会导致以下事实:来自中间分支的所有更改都将出现在目标分支中,即
then branch2 -> branch3 and finally branch3 -> trunk
-
branch3将获得branch1 branch2的更改
-
中继将获得branch1 branch2 branch3更改
而不是为其他开发分支共享来自branch1的更改
- 您永远都不要在Subversion中执行兄弟分支之间的合并,否则将来合并的基础选择可能会搞砸。因此,您的第一个建议只是不好的建议。他需要将branch1合并回主干,然后从主干进行追赶合并(如果他也想要的话,将不是来自branch1的更改拉出来),或者将主干樱桃拾取到branch2和branch3中。
-
@BenReser-"将来合并的基础选择可能会搞砸" WTF ?!给我看看现实生活中的样本!!!通过WIP造成的树干中毒是BAD IDEA(tm)。恐怕这样的开发人员会将Subversion自信地带入历史的垃圾箱
-
那家伙说他无论如何都要把改变带回主干。因此,谁说关于WIP的任何更改。实际上,我们几乎不知道他的工作流程是什么样的,因为他没有告诉我们。我也不是说情况是理想的,只是告诉您情况如何。我将在这里稍作说明。当我只想指出事物的状态时,我也真的不喜欢这种侮辱。
-
简单的例子可以满足您的期望:paste.apache.org/fQeu困难的例子(branch1拆分了一个文件,谢天谢地,branch2和3不会碰到,否则会有其他冲突,Java开发人员会看到这种情况大量重构时发生的错误)paste.apache.org/60cM之所以失败,是因为我们为新文件计算了错误的基数,然后尝试再次添加它。只有在主干和分支之间合并才可以避免这种情况:paste.apache.org/5I9f您也可以通过不svn cp'ing来避免,但是那样就可以避免归咎于历史。是的,这很烂,是的,因为没有"真正的"分支。