SVN合并后恢复(svn revert after merge)

2019-08-16 17:55发布

我已经做了两个分支之间的合并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)有一些合法的合并,由上即不相关的更改foobar ,以相同的文件,和(2)一些文件已在被删除bar ,我当我检查我想从删除foo也。)

我想大多数合并后的文件来检查,但他们中的一些,我想扔出去从变化bar分支和保留现有的文件foo分支。 所以我尝试:

svn revert baz/qux.quux

这什么都不做。 qux.quux仍然有从变化bar分支。 我尝试svn status ; 它是空白。 我试着从一个prestine副本复制了foo分支:文件现在有正确的内容,但svn diff现在显示bar < foo的diff。 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的的版本qux.quux ? 而且我怎么收拾我的工作副本“坏”的状态信息?

我有我的感觉从根本上误解svn merge莫名其妙。

Answer 1:

看来要通过挑肥拣瘦,这是一个合并黑客在最好的,SVN 。 你需要成为一个SVN合并专家拉这一关。 其它版本控制系统(HG,的darcs,BZR)支持开发的这种方法better ,而是带着自己的疣。 所以,挑选你的毒药,习惯了就好了。



Answer 2:

大卫,用PEG-修订明智和必要的决定? 我只是试图让合并尽可能容易了,请你重新做的新的干净的工作拷贝从头合并,这里显示,全实时命令和输出 (UUID不是私人数据,试验可回购的URL文件:///)。

我的测试结果(合并元首和恢复单个文件)显示预期的结果(您可以重新检查它在我的测试案例 - 库是打开的)

  • 库喂一些历史: http://mayorat.ursinecorner.ru:8088/svn/Hello/
  • 目标分支Leichtbau,德语: http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Leichtbau-Deutsch/
  • 源科领域-法兰西: http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/branche-francaise/

步骤和操作

>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 (和盲目合并)到分公司负责人能够承诺merge-前集,因为你svn co svn://myserver/repo/branches/foo@1000在SVN结帐不-HEAD修订和修订历史必须是线性



文章来源: svn revert after merge
标签: svn svn-merge