如何在Subversion中返回旧版本的代码?

Che*_*rot 478 svn backport

我正和一位朋友一起开展一个项目,我想回到我们代码的旧版本并将其设置为当前版本.我该怎么做?

我在vs08上使用"anksvn".

我在我的电脑上有我想要的版本,但是提交失败了; 我收到的消息是"提交失败,文件或目录已过期".

我的PC上也有subversion客户端.

Jon*_*eet 767

基本上你需要"向后合并" - 在当前版本和先前版本之间应用差异当前版本(所以你最终得到一个看起来像旧版本的工作副本),然后再次提交.例如,从修订版150(当前)回到修订版140:

svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"
Run Code Online (Sandbox Code Playgroud)

Subversion Red Book有一个很好的部分.

  • 如果您使用的是TortoiseSVN,请右键单击文件选择"合并",然后选择"合并范围的修订".在日志框中键入140-150并单击反向复选框.之后,照常提交.这将执行与Jon的示例相同的操作. (76认同)
  • 要从头修订版恢复,您还可以编写`svn merge -r HEAD:140`. (35认同)
  • 使用eclipse和subclipse,您可以右键单击项目,团队/显示历史记录,然后选择要"撤消"的修订版本,然后右键单击选择"还原所选修订版本中的更改". (8认同)
  • 注意合并命令末尾的点(.) (4认同)
  • 但合并不会覆盖我的更改和新修订. (3认同)
  • @DavGarcia的TortoiseSVN指令不适合我,至少不能恢复修订版中的所有文件(使用TortoiseSVN 1.8.8).右键单击该文件夹,选择TortoisSVN->显示日志.选择要还原的修订版本,右键单击"还原此修订版本中的更改".提交更改. (3认同)
  • 所以在上面的提交`svn commit -m"回滚到r140"后,修订号是151? (2认同)

joe*_*dle 173

您无法直接使用PC上的好副本进行任何操作的原因是它的.svn文件夹知道它是过去的代码,因此需要更新.但是你实际上只能在颠覆历史的头部提交更改.

您可以使用

.svn

检查项目的各种旧版本,直到找到正确版本的正确版本号.找到它后,更新到最新(头)修订版,然后按照上面的建议应用svn合并.

如果您真的找不到它,并且需要在PC上提交副本,那么请获取最新版本的新版本,并将"好"版本复制到它的顶部(没有 .svn文件夹!).从文件夹和subversion中删除不在好副本中的所有文件,并提交您现在拥有的文件.

  • svn不会将其解释为修改,我无法提交。 (2认同)

M.O*_*man 36

只需使用此行

svn update -r yourOldRevesion

您可以使用以下方法了解当前版本:

svn信息

  • 这并没有解决问题.相反,这会产生提问者在提出问题时所处的状态. (15认同)
  • 如果您不幸遵循此建议,请运行:“svn resolve --acceptworking -R”。 (3认同)

Bil*_*ill 27

如果这是您想要做的事情,使用合并撤消整个签到的标准方法很有效.但有时,您只想恢复单个文件.没有合法的方法可以做到这一点,但有一个黑客:

  1. 使用svn log查找所需的版本.
  2. 使用svn的export子命令:

    svn export http:// url-to-your-file @ 123/tmp/filename

(其中123是文件的正确版本的修订号.)然后移动或复制该单个文件以覆盖旧文件.签入修改后的文件,您就完成了.

  • `svn cat -r 123 path-in-your-working-copy> path-in-your-copy-copy` (10认同)

Yau*_*ich 8

多一点老派

svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch
Run Code Online (Sandbox Code Playgroud)

通常

svn diff
svn commit
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为这是最合适的:

例如,如果提交的代码包含从rev 5612到5616的修订版,则向后合并,只需向后合并.它最终适用于我.

例如:

svn merge -r 5616:5612 https://<your_svn_repository>/
Run Code Online (Sandbox Code Playgroud)

它将包含一个返回到以前版本的合并代码,然后您可以提交它.