合并后的svn还原

时间:2013-02-05 00:39:52

标签: svn svn-merge

我在两个分支之间完成了一个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)存在一些合法的合并,即{{}上的无关更改1}}和foo指向相同的文件,(2)某些文件已在bar中删除,而我在办理登机手续时也希望将其从bar删除。)

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

foo

这没有任何作用。 svn revert baz/qux.quux 仍有来自qux.quux分支的更改。我试试bar;它是空白的。我尝试从svn status分支的prestine副本进行复制:文件现在具有正确的内容,但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] 的{​​{1}}版本?如何在工作副本中清除“坏”状态信息?

我觉得我从根本上误解了foo

2 个答案:

答案 0 :(得分:0)

看起来你想要通过挑选来合并,这是一个hack at best, in SVN。您需要成为svn merge专家来解决这个问题。其他版本控制系统(hg,darcs,bzr)支持这种开发方法better,但它们有自己的瑕疵。所以,选择你的毒药并习惯它。

答案 1 :(得分:0)

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

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

步骤和操作

>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修订重复这个测试。但是 - 我更喜欢使用来自相应分支的真实修订和(与merge-revert无关)我必须执行(如果内存很好)svn up(并盲目合并)到分支HEAD之前能够提交合并集,因为SVN 中的svn co svn://myserver/repo/branches/foo@1000结帐非HEAD修订版和修订历史记录必须是线性的