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

时间:2012-08-01 19:07:24

标签: 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

主干和已完成的功能分支都是最新的,没有本地更改。 发生了什么事?

3 个答案:

答案 0 :(得分:6)

我有这个错误。

您的问题几乎是唯一的谷歌搜索结果(here is a description of the keywords)。

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

cd myLocalTrunk
svn merge --reintegrate https://svn.blah.blah/blah/blah/branches/myBranch
svn ci -m "reintegrating myBranch into trunk"

答案 1 :(得分:1)

看起来我分道错误/错误。我还没弄明白如何以正确的方式解决这个问题,因为在这种情况下,这里的任何人都是如何将我的更改保存到主干中,保留了这个短命分支的大部分历史记录:

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

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

现在您只需要对未更改的文件进行更改。你不能做两个源合并,因为(至少在cygwin的svn 1.7中)它会删除然后添加文件,消灭历史记录。我选择的选项是构建/应用补丁并发出关于发生的事情的提交消息。

much better个地方需要了解补丁,但以下是我的所作所为。请记住,如果您的文件在两个树中都已更改,则需要手动修复合并问题。

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

进行干运行以确保修补程序正常工作并修复正确的文件patch -p0 --dry-run < patch.patch 然后修补它patch -p0 < patch.patch

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

保持这个问题的开放,希望有人知道真正的答案。

答案 2 :(得分:0)

一般来说,这里不需要使用补丁文件 - 任何“-c x”或“-r x:y”范围实际上是一个变更集,即一种可以应用的补丁。让我们做一个完整的例子,最初是

svn copy trunk/path/file branch/path/file

然后可以在trunk上工作。现在您需要知道修订范围以将更改应用于目标 - 因为修订号是全局的,您可以询问这两个文件,例如

svn info trunk/path/file 
# 35

svn info branch/path/file
# 27

这是要使用的范围,现在你可以说

svn merge -r 27:35 trunk/path/file branch/path/file

您可能会认为它就像是在内部创建一个补丁文件,范围是应用于目标的27:35。只要这只是文件到文件,你甚至不能得到树冲突(想想目录合并中重命名的文件)。