SVN反向合并?


70

我的SVN信息库在497版上是完美的。我执行了几次错误的提交,因此现在在HEAD版上。我看到要回滚,应使用如下命令:

svn merge -r HEAD:497 .

在工作目录中(而工作目录在HEAD修订版中)。但这是正确的命令吗?还是我使用HEAD:498?还是496?我已经运行了该命令,当前版本似乎与497不同,因为当我更新-r 497(或当我拥有497工作副本并更新-r HEAD)时,会发生许多文件更新。

我是否遇到某种击剑杆问题,而HEAD:497实际上又恢复为496,还是其他?还是当我更新时,尽管HEAD和497相同,但SVN会回溯到每个修订版?

编辑:

澄清一下,正如我之前说过的,当我在497和合并的HEAD之间进行更新时,我看到发生了很多文件更改。我以为,如果497和HEAD相同,它将检测到,并且不会发生文件更改;它只会说“已更新至修订版497”。那么我的命令是错误的,还是这个想法是错误的?(如果是这样,为什么?)


它实际上将以相反的顺序执行合并,并且可能某些/大多数/所有文件最终都处于初始状态。
桑德·里肯

Answers:


75

如果您的回购版本497处于原始状态,那么我认为您是正确的,您需要执行以下操作:

svn merge -r HEAD:497 .

该merge命令只会更改您的工作副本中的文件,因此请记住也要提交更改以更新存储库中的HEAD。

合并之后,接着是提交,请尝试将497版本与HEAD比较,并且它们应该相同。


比较497和HEAD的最简单方法是什么?这是一个巨大的存储库,仅merge命令就需要20-30分钟。是否有一个可以在服务器端运行的命令,只是告诉我它们是否相同,还是我必须将两个修订版本放入两个单独的文件夹中并自己进行比较?
Ricket

我通常使用eclipse subclipse进行比较,并且可以确定它在svn diff后台运行命令的变化,并且就像您说的那样,即使是中小型仓库,也可能需要很长时间才能进行比较。我通常会浏览日志以了解还原和/或合并是否按我预期的方式工作。这是指向svn差异的更多信息的链接:svnbook.red-bean.com/en/1.4/…–
Upgradingdave

好的,我成功还原了。因为第一次没有用,所以这次我做了HEAD:496,然后是496:497,然后提交了。有趣的是,提交后它仍然以为我在r507,所以我必须svn更新以成为r508(它刚刚提交);更新当然没有做任何事情。然后,我确实使用了svn diff,并指定了两个URL,并且显然使用了服务器端的diff,因为返回空白屏幕非常快。不同版本的测试差异确认空白为好;完全相同的修订。:)
Ricket

您是否提交了特定文件?提交仅更新其更改的文件的修订,更新使您可以将所有文件归还为单个修订。
桑德·里肯




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 .

然后,您可以将该文件夹与现有文件夹进行比较,如果需要,可以将整个修订版本从那里提交回存储库中。



0

考虑HEAD:150恢复r1 = 100和r2 = 90

  1. svn
  2. svn merge -r 100:99
  3. svn merge -r 90:89

注意:这些更改不会还原EXTERNALS文件夹!


0

SVN中的反向合并

  • 如果是文件级别
  • SVN将从文件的特定版本和工作副本的HEAD版本中保留公共文件内容在工作副本中。

  • 如果是文件夹级别

  • 在SVN反向合并中,如果在特定版本中找不到文件,它将保持工作副本不变。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.