【问题标题】:svn merge theirs-full resutls are not logical when working with files with and without conflictssvn merge theirs-full 结果在处理有和没有冲突的文件时不合逻辑
【发布时间】:2014-06-17 12:26:07
【问题描述】:

合并选项 theirs-full 导致有时“我的”更改与“他们的”不冲突会被丢弃,有时不会。这很令人困惑。

另一方面,合并选项 theirs-conflict 很明确:它会导致始终保留与“他们的”不冲突的“我的”更改。如果发生冲突,将采取“他们的”。

我不明白如何安全地使用 theirs-full。合乎逻辑且安全的方式是他们的冲突。

问题是无论文件之间是否存在冲突,将 theirs-full 的逻辑更改为始终采用“他们的”内容是否有意义?只要文件之间存在差异 - 就拿“他们的”。

这将使 theirs-full 更加有用,并使其符合此选项的名称所暗示的内容。



这里有一点解释:

如果两个文件版本,一个来自主干,另一个来自分支,有冲突的差异,那么 svn merge with theirs-full 选项将采用“他们的”文件的完整版本。无论哪个版本更新,合并将始终采用“他们的”,而“我的”更改,无论是否冲突,都将被丢弃!

如果两个文件版本没有冲突的差异,则 svn merge with theirs-full 选项会将更改从“他们的”合并到“我的”文件中。我会得到“他们的”和“我的”的组合。

这会导致意外的合并结果 - 碰巧有冲突的文件将等于“他们的”版本,即使是非冲突的“我的”更改也会丢失。恰好没有冲突的文件将具有“他们的”和“我的”的组合内容。

因此,对于所有不同的文件,让 theirs-full 始终采用“他们的”。

【问题讨论】:

  • 这是陈述,不是问题。你有问题吗?
  • 好的,我让我的问题更明显了......所以无论文件之间是否存在冲突,将 theirs-full 的逻辑更改为始终采用“他们的”内容是否有意义?只要文件之间存在差异 - 使用“他们的”。
  • 所以你想要一些用源分支覆盖目标分支的东西。那么,这并不是真正的合并。更像是一个副本,但不会丢失目标分支的历史记录。

标签: svn version-control merge


【解决方案1】:

所以你想要一些东西用源分支覆盖目标分支。那么,这并不是真正的合并。更像是一个副本,但是一个不会丢失目标分支历史的副本。

我认为颠覆的基本原理是:如果对目标分支的任何修改不在源分支中,它们不应该被合并覆盖,合并只是为了将源分支中的更改带到目标分支。它可能是与合并不同的动词。

我想你可以用这样的脚本来编写它:

svn checkout ^/branches/target
svn checkout ^/branches/source
copy -r source/src target/src
svn commit -m 'copy files in source to target' target

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2014-03-11
    • 1970-01-01
    • 2013-02-19
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多