0

我们在我们的 repo 中看到了一个奇怪的问题,其中以下命令报告了传入的冲突:

svn merge --dry-run -r BASE:HEAD . | egrep -e '^[[:space:]]*(A|B|C|D|E|G|U)+[[:space:]]+'

   C path/to/fileA
   C path/to/fileB
   C path/to/fileC
U    path/to/fileD

但是, svn up 实际上不会导致冲突。实际上,输出如下所示:

At revision 7922.
At revision 7922.
At revision 7922.
U    path/to/fileD
Updated to revision 7922.

据我所知,有问题的文件没有什么奇怪的。svn status 不报告任何问题,svn info 显示文件是最新的,svn resolve 无效。这种情况会定期发生,但并非每次都发生,而且总是显示相同的文件。

有没有人见过这个?

编辑:看起来我遗漏了一个关键细节,这也许就是为什么没有人能够在这里回答的原因。在 svn up 步骤中,我们将单独更新每个文件以避免在分级自动部署期间发生冲突(例如 t0:期待传入的更新,t1:对数据库运行任何必要的架构更改,t1+X:更新其余的批次,其中 X 可能是一个重要的数字)。完整更新如下所示:

svn up --depth=empty path/to/fileA path/to/fileB path/to/fileC path/to/fileD

At revision 7922.
At revision 7922.
At revision 7922.
U    path/to/fileD
Updated to revision 7922.
4

1 回答 1

0

看起来这里的问题来自不同步的父目录。

前任:

修订版 X:

A  path/to/fileA

修订 X+1:

A  path/to/fileB
A  path/to/fileC

我们一直在更新:(假设 BASE = X-1 和 HEAD = X+1)

%> cd dir/
%> svn merge --dry-run -r BASE:HEAD .     # look ahead for incoming updates
%> ...                                    # run schema updates against DB
%> svn up --depth=empty path/to/fileA     # update just the incoming changes to
   path/to/fileB path/to/fileC            # avoid pulling someone else's
                                          # recent commit

虽然这对于提交中涉及的 3 个文件来说都很好,但 dir/、dir/path/ 和 dir/path/to/ 现在都落后于 HEAD 修订版。svn info dir/ 将修订报告为 X-1 (BASE),因为它没有包含在以前的 svn up 中。

现在,当我们到达修订版 X+2 时:

U  path/to/fileD

我们再次尝试该过程,但这次前瞻报告冲突:

%> cd dir/
%> svn merge --dry-run -r BASE:HEAD .
...
   C path/to/fileA
   C path/to/fileB
   C path/to/fileC
U    path/to/fileD
...

(来自 X-1->X+2 的传入添加,当文件确实已经存在时)。同时,对这些文件的 svn up 将无害地报告所有内容都是最新的。

从那以后,我们将我们的部署变成了一个更原子的过程,所以我们可以自由地从分支根目录 svn,避免丑陋的 --depth=empty,并保持所有文件同步。

于 2012-10-23T01:43:48.800 回答