重新集成分支时,PREV,BASE或COMMITTED修订关键字对URL无效

Chr*_*ris 6 svn merge

我已经分支了我的主干(在之前的版本中)并实现/提交了一个新功能,并在本地实现了另一个功能的一部分到分支.我现在需要将完成的功能重新集成到主干.

svn cp branches/completedfeature branches/uncompletedfeature在自己的分支中获得部分完成的功能.然后我svn revert -R .在第一个分支中的所有内容都是最新的.

现在,当我svn merge --reintegrate ../../branches/completedfeature从后备箱,我得到这个神秘的(对我来说)错误:

PREV, BASE, or COMMITTED revision keywords are invalid for URL while reintegrating a branch
Run Code Online (Sandbox Code Playgroud)

主干和已完成的功能分支都是最新的,没有本地更改.到底是怎么回事?

小智 6

我有这个错误.

您的问题几乎是唯一的谷歌搜索结果(这里是关键字的说明).

我有一个很长的分支,其他分支合并到它...补丁过程将是漫长而艰难的.所以尽管SVN redbood的这一部分表明你应该合并两个工作副本,但我乐观地尝试从URL重新集成并且它有效!

cd myLocalTrunk
svn merge --reintegrate https://svn.blah.blah/blah/blah/branches/myBranch
svn ci -m "reintegrating myBranch into trunk"
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 1

看起来我的分支很糟糕/错误。我还没有弄清楚如何以正确的方式解决这个问题,对于处于这种情况的任何人来说,这里是我如何对主干进行更改,保留这个短暂分支的大部分历史:

查找所有已更改的文件diff -ur trunk branch。确保查看差异,因为主干中不在分支中的任何更改都将被恢复,因此请忽略这些文件,或者如果两个树中的文件都有更改,请确保稍后手动编辑差异。

使用 svn 复制任何新文件以保留其历史记录svn cp branch/path/file trunk/path/file

现在您只需要对未更改的文件进行更改即可。您无法进行两个源合并,因为(至少在 cygwin 中的 svn 1.7 中)它将删除然后添加文件,从而清除历史记录。我选择的选项是构建/应用补丁并就所发生的事情发出提交消息。

很多 更好的地方可以学习修补知识,但下面是我所做的。请记住,如果两个树中的文件都发生了更改,则需要手动修复合并问题。

使用对每个文件执行此操作来构建补丁diff -u trunk/path/file branch/path/file >> patch.patch ,或者再次传入递归标志并让 diff 完成艰苦的工作。

进行一次试运行以确保补丁有效并修补了正确的文件patch -p0 --dry-run < patch.patch 然后对其进行修补patch -p0 < patch.patch

然后确保项目构建并签入。

留下这个问题希望有人知道真正的答案。