svn合并错误“必须与祖先相关”,即使先前已合并文件

时间:2018-09-01 23:16:53

标签: svn svn-merge

问题描述

我的脚本有一个SVN存储库。 最近,我注意到我的大多数脚本都有很多常见的代码片段(即解析选项),因此我决定创建一个简单的脚本作为模板。 然后,我将能够使用svn copy从中创建新的脚本。它将允许我仅对模板文件进行改进,并通过命令svn merge将更改应用于所有脚本。

现在,我想将已经存在的脚本链接到模板,以便我也可以在它们上svn merge。 我尝试了命令svn merge -r 0:HEAD ^/template ./old-script。它似乎有效。它记录了外观正确的mergeinfo。不幸的是,SVN仍然不了解这些文件应该是相关的。当我尝试执行svn merge ^/template ./old-script来转移一些新更改时,SVN显示错误:svn: E195016: 'svn://localhost/test/template@42' must be ancestrally related to 'svn://localhost/test/old-script@41'

如何告诉SVN将old-script中的svn copy视为template

复制步骤

我已经准备了一个POSIX脚本,可以在新的存储库中重现这种情况:

#!/bin/sh

printf 'Creating unrelated files...\n'
printf 'aaa\n' >./aaa
printf 'bbb\n' >./bbb
svn add ./aaa ./bbb
svn commit --message 'Created unrelated files.'

printf '\nMaking change in aaa so it can be merged to bbb...\n'
printf 'aaa\n' >>./aaa
svn commit --message 'Changed aaa.'

printf '\nMerging aaa to bbb...\n'
svn merge ^/aaa ./bbb --revision 0:HEAD --accept=postpone
printf 'aaa\nbbb\n' >./bbb
svn resolve --accept=working ./bbb
svn commit --message 'Merged aaa to bbb. Files should be related now.'

printf '\nMaking another change in aaa...\n'
printf 'aaaaaa\n' >>./aaa
svn commit --message 'Changed aaa again.'

printf '\nPrinting mergeinfo of bbb...\n'
svn propget svn:mergeinfo ./bbb

printf '\nTrying to merge aaa to bbb again...\n'
svn merge ^/aaa ./bbb  # Why is it not working?

运行此脚本可获得以下结果:

Creating unrelated files...
A         aaa
A         bbb
Adding         aaa
Adding         bbb
Transmitting file data ..done
Committing transaction...
Committed revision 1.

Making change in aaa so it can be merged to bbb...
Sending        aaa
Transmitting file data .done
Committing transaction...
Committed revision 2.

Merging aaa to bbb...
--- Merging r2 into 'bbb':
C    bbb
--- Recording mergeinfo for merge of r2 into 'bbb':
 U   bbb
Summary of conflicts:
  Text conflicts: 1
Resolved conflicted state of 'bbb'
Sending        bbb
Transmitting file data .done
Committing transaction...
Committed revision 3.

Making another change in aaa...
Sending        aaa
Transmitting file data .done
Committing transaction...
Committed revision 4.

Printing mergeinfo of bbb...
/aaa:2

Trying to merge aaa to bbb again...
svn: E195016: 'svn://localhost/test/aaa@4' must be ancestrally related to 'svn://localhost/test/bbb@3'

我在svnbook中找到了以下信息:

  

如果“合并跟踪”处于活动状态,则Subversion将在内部进行跟踪   关于合并操作的元数据(即svn:mergeinfo属性)   这两个合并来源祖先相关-如果第一个来源是   第二的祖先,反之亦然—保证是   使用前两种形式的情况。颠覆也将   将工作副本目标上预先存在的合并元数据考虑在内   在确定要合并的修订版本时,为了避免   重复合并和不必要的冲突,它可能只会合并   请求的范围。

似乎可以确认mergeinfo属性指示文件与祖先相关。

0 个答案:

没有答案