0

我已经在两个分支之间进行了 svn 合并——没有签入——现在我想“取消合并”我工作副本中的一些文件。类似于以下内容:

svn co svn://myserver/repo/branches/foo@1000 foo
cd foo
svn merge svn://myserver/repo/branches/foo@1000 \
          svn://myserver/repo/branches/bar@1000

(注意:我想使用svn merge,而不仅仅是从 的工作副本中复制文件bar,因为(1)有一些合法的合并,即对相同文件进行了不相关的更改,foo以及bar(2)一些文件已被删除在bar我登记入住时,我也想从中删除它们foo。)

我想签入大多数合并的文件,但其中一些,我想从bar分支中删除更改并保留分支中的现有文件foo。所以我尝试:

svn revert baz/qux.quux

这无济于事。qux.quux仍然有bar分支的变化。我试试svn status;它是空白的。foo我尝试从分支的原始副本复制:该文件现在具有正确的内容,但svn diff现在显示了bar < foo差异。svn revert再次:现在我们已经bar恢复了更改。让我们试试svn info

Path: baz/qux.quux
Name: qux.quux
Working copy root path: /home/mydir/foo
URL: svn://myserver/repo/branches/foo/baz/qux.quux
Repository root: svn://myserver/repo
Repository UUID: [whatever]
Revision: 1000
Node Kind: file
Schedule: normal
Last Changed Author: [author of last change on bar, not foo]
Last Changed Rev: [rev of last change on bar, not foo]
Last Changed Date: [date of last change on bar, not foo]

那么我如何回到foo's 的版本qux.quux?以及如何清除工作副本中的“坏”状态信息?

我有一种感觉,我从根本上svn merge以某种方式误解了。

4

2 回答 2

0

看来您想通过SVN 中的樱桃采摘进行合并,这充其量是一种黑客攻击。您需要成为svn 合并专家才能完成此任务。其他版本控制系统(hg、darcs、bzr)支持这种开发方法better,但也有自己的缺陷。所以,选择你的毒药并习惯它。

于 2013-02-05T00:53:23.303 回答
0

大卫,使用 PEG 修订是明智且必要的决定吗?我只是尝试使合并尽可能简单,并要求您使用新的干净工作副本从头开始重新完成合并,并在此处显示全部、完整的真实命令和输出(UUID 不是私有数据,用于测试的 repo 的 URL 可以是文件:///)。

我的测试结果(合并头和恢复单个文件)显示预期结果(您可以在我的测试用例上重新检查它 - 存储库已打开)

步骤和操作

>svn co http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Leichtbau-Deutsch/
A    Leichtbau-Deutsch\Hello.en.txt
A    Leichtbau-Deutsch\Hello.fr.txt
A    Leichtbau-Deutsch\Hello.de.txt
 U   Leichtbau-Deutsch
Checked out revision 37.

>cd Leichtbau-Deutsch

>svn merge http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/branche-francaise/
--- Merging r26 through r37 into '.':
U    Hello.fr.txt
Conflict discovered in 'Z:/Leichtbau-Deutsch/Hello.de.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: tc
U    Hello.de.txt
--- Recording mergeinfo for merge of r26 through r37 into '.':
 U   .

>svn status
 M      .
M       Hello.de.txt
M       Hello.fr.txt

>svn revert Hello.fr.txt
Reverted 'Hello.fr.txt'

>svn st
 M      .
M       Hello.de.txt

最后的预期结果

PS:如果你愿意,我可以用 PEG 修订版重复这个测试。但是 - 我更喜欢使用来自相应分支的真实修订并且(与合并恢复无关)我必须执行(如果记忆对我有用)svn up(并且盲目合并)分支 HEAD 才能提交合并集,因为您svn co svn://myserver/repo/branches/foo@1000在 SVN 中的 checkout not-HEAD 修订和修订历史必须是线性的

于 2013-02-05T01:23:51.640 回答