6

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

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

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

4

3 回答 3

6

我有这个错误。

你的问题几乎是唯一的谷歌结果(这里是关键字的描述)。

我有一个长分支,其他分支并入其中......补丁过程将是漫长而困难的。因此,尽管如此,SVN redbood 的这一部分建议您应该合并两个工作副本,我乐观地尝试从 URL 重新集成并且它起作用了!

cd myLocalTrunk
svn merge --reintegrate https://svn.blah.blah/blah/blah/branches/myBranch
svn ci -m "reintegrating myBranch into trunk"
于 2013-05-29T01:09:53.237 回答
1

看起来我的分支很差/错误。我还没有想出如何以正确的方式解决这个问题,对于处于这种情况的任何人来说,我如何将我的更改放入主干,以保留这个短暂分支的大部分历史:

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

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

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

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

使用 Do this for each file 构建您的补丁diff -u trunk/path/file branch/path/file >> patch.patch ,或者再次传入递归标志并让 diff 完成艰苦的工作。

进行试运行以确保补丁正常工作并修补正确的文件patch -p0 --dry-run < patch.patch 然后对其进行修补patch -p0 < patch.patch

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

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

于 2012-08-02T15:34:07.983 回答
0

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

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

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

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 范围创建补丁文件。只要这只是文件到文件,您甚至都不会发生树冲突(想想目录合并中重命名的文件)。

于 2013-12-04T14:59:57.967 回答