2009-12-18 105 views
66

我的SVN信息库在修订版497上是完美的。我执行了几个不好的提交,所以现在它在修订HEAD。我看到回滚你应该使用这样的命令:SVN反向合并?

svn merge -r HEAD:497 . 

,而在工作目录(和工作目录是,在最新版本)。但是,这是正确的命令?或者我使用HEAD:498?或496?我已经运行了该命令,并且当前修订看起来与497不一样,因为当我更新-r 497(或者当我有一个497工作副本并且我更新了-r HEAD)时,会发生大量文件更新。

我是否有某种fencepost问题,其中HEAD:497实际回复到496,或者是什么?还是说,当我更新时,尽管事实上HEAD和497是相同的,但SVN可以追溯到每个修订版本。

编辑:

只是为了澄清,正如我刚才所说,当我497,我的复合头之间更新,我看到了很多的文件变化发生。我认为如果497和HEAD是相同的,它会检测到,并且不会发生文件更改;它只会说“更新至修订版497”。那么我的命令是错的,还是这个想法错了? (?如果是的话,为什么)

+0

它实际上会以相反的顺序执行合并,它可能是某些/大部分/所有文件都处于初始状态。 – 2009-12-18 21:46:21

回答

68

如果你的回购是在原始状态的修订497,那么我认为你是正确的,你需要做:

svn merge -r HEAD:497 . 

即合并命令只会改变你的工作拷贝文件,所以记得要还承诺在回购中更新HEAD的更改。

完成合并后,接着提交,尝试比较版本497和HEAD,它们应该是相同的。

+0

比较497和HEAD的最简单方法是什么?这是一个巨大的存储库,单独的合并命令需要20-30分钟;有没有可以运行服务器端的命令,只是告诉我它们是否相同,还是必须将两个修订版分别放入两个单独的文件夹中并自己做一个差异? – Ricket 2009-12-18 21:40:30

+0

我通常使用eclipse subclipse做一个比较,并且很确定它在幕后运行'svn diff'命令的变体,就像你说的那样,即使使用一个中等大小的repo,也需要很长的时间时间做一个比较。 我通常浏览日志以了解恢复和/或合并是否按照我的预期方式工作。 下面是关于svn diff的更多信息的链接:http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.tour.history.diff.wcrepos – Upgradingdave 2009-12-18 22:15:18

+0

好的,我成功恢复了。由于第一次没有工作,这次我做了头:496,然后496:497,然后承诺。有趣的是,在提交之后它仍然认为我是在r507,所以我不得不svn更新成为r508(它刚刚承诺);更新当然没有做任何事情。然后我使用了svn diff,指定了两个URL,它显然做了一个服务器端diff,因为它很快返回一个空白屏幕。用不同版本的测试差异确认空白是好的;相同的修订最后。 :) – Ricket 2009-12-18 22:49:28

21

如果要撤消R123,则需要svn merge -r 123:122 .

这意味着你需要运行

svn merge -r HEAD:497 . 

要验证运行:

svn diff -r 497 
1

为了支持不希望改变了(也许你犯下的调试已经在他们陈述的东西沿着其他文件,你真的要提交),说坏的变化是-R10:

svn update 
svn merge -r10:9 <URL of your repository base> . 

现在你可以带回不仅仅是文件你没有要提交:

svn update 
svn update -r10 
svn commit <just that one file> # this is the command you meant to type from the beginning 
0

如果您想要一个快速可靠的方式来回滚到特定的修订版本,那么只需查看版本库的旧版本即可。

运行svn info提醒自己你的资料库的URL,然后创建一个新的文件夹,并检出所要的修订:

cd <your new folder> 
svn checkout <URL> -r 497 . 

然后你可以diff的文件夹对您现有的文件夹,你可以提交这个如果需要的话,整个修订版都可以从这里恢复到版本库中。

0

考虑HEAD:150复归R1 = 100和r2 = 90

  1. SVN向上
  2. SVN合并-r 100:99
  3. SVN合并-r 90:89

注意:这些更改将不能恢复的外部文件夹!