8

运行时svn up我经常遇到这个提示:

Conflict discovered in 'lib/somelibrary.so'.
Select: (p) postpone,
        (mf) mine-full, (tf) theirs-full,
        (s) show all options:

击中s显示选项mcand tc, mine-conflict 和 theirs-conflict,据说这允许我使用我的版本或他们的版本来处理所有冲突,而不仅仅是somelibrary.so.

但是,这些选项不起作用。我收到这条消息:

Invalid option; cannot choose based on conflicts in a binary file.

Edwin 的回答清楚地表明我误解了如何mctc工作,但我仍然希望能够对每个冲突的文件采取相同的解决方案。有没有办法让 svn 使用mftf每次冲突都不会在第一次后再次提示我?

4

2 回答 2

11

要自动解决 , , 上的冲突,svn update请使用该标志。svn switchsvn merge--accept

SVN 书 - svn 选项

--accept ACTION
指定自动解决冲突的操作。可能的操作是推迟、基地、全矿、全他们、编辑和启动。

每个动作的含义可以在svn resolve 规范中看到:

您可以根据所需的分辨率将以下参数传递给 --accept 命令:

base在更新工作副本之前选择作为 BASE 修订的文件。也就是说,您在进行最新编辑之前签出的文件。

工作假设您已经手动处理了冲突解决方案,请选择当前在工作副本中的文件版本。

mine-full在运行 svn update 之前使用文件副本解决所有冲突文件。

theirs-full使用运行 svn update 时从服务器获取的文件副本解决所有冲突文件。

mine-conflict通过在每个文件内容的冲突区域中优先选择本地修改而不是从服务器获取的更改来解决所有冲突文件。

theirs-conflict通过优先从服务器获取的更改而不是每个文件内容的冲突区域中的本地修改来解决所有冲突的文件。

另请查看解决任何冲突部分。

最后,举个例子。要在更新时自动解决所有冲突mine-full,请执行:

$ svn up --resolve mine-full
于 2012-01-28T14:35:28.323 回答
1

mc 和 tc 是合并选项,其中一个只考虑冲突的行,然后从您的源 (mc) 或“其他”源 (tc) 合并这些行。

二进制文件通常不是以包含行的方式构造的,因此,基于用另一个文本行替换一个文本行的冲突解决算法对于二进制文件将无法正常工作。编写 SVN 的开发人员知道这一点,因此在处理二进制文件时,不会接受仅对文本文件有意义的选项。

您可以使用 mf 和 tf,它们略有不同。他们不是只替换文件的冲突区域,而是用完整文件的(mf)“我的”副本或(tf)完整文件的“他们的”副本)替换整个文件。

如果您希望 SVN “关闭并接受 mc / tc 文件选项”,则 svn 编辑 mime-type 并将其设置为文本。祝你好运,如果这不是文本文件,你可能会得到一个不在任一起始二进制文件规范内的文件(例如,合并两个 jpeg 文件的连续部分不会产生有效的 jpeg 文件)。

于 2012-01-27T21:03:50.833 回答