我已经做了两个分支之间的合并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
; 它是空白。 我试着从一个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
莫名其妙。
看来要通过挑肥拣瘦,这是一个合并黑客在最好的,SVN 。 你需要成为一个SVN合并专家拉这一关。 其它版本控制系统(HG,的darcs,BZR)支持开发的这种方法better
,而是带着自己的疣。 所以,挑选你的毒药,习惯了就好了。
大卫,用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修订和修订历史必须是线性