如何将Subversion仓库还原到特定版本,而不是我的工作副本?

4

我是相对较新的Subversion用户,之前使用Source Safe。但现在用Subversion让我感到疯狂。使用Tortoise界面时,提交(Commit)会显示我的bin目录中的.java文件,称其为“丢失” - 好吧,这是另一个问题。基本上,当我尝试几种方法来摆脱虚假的“bin”消息时,Tortoise删除了整个源目录。我试图重新添加文件,但添加后,它作为新文件出现,没有历史记录。

如何将Subversion回退到特定版本?就好像从未发生过一样?我知道如何在VSS中执行此操作,但每次我在TortoiseSVN中尝试时,它只是修改了我的工作副本。我不想再次检查我的工作副本,因为那样会使我失去所有历史记录。Subversion能否忘记某些修改?

顺便说一下,我已经在stackoverflow上进行了搜索,但找到的最接近的事情是导出并重新导入整个存储库,而我认为我还没有达到那个地步。Subversion必须能够执行这个最简单的操作!

3个回答

7
Subversion不会忘记,但你可以按照以下步骤操作:
假设当前版本是100,你想回到第70个版本,那么你需要创建一个版本101,该版本与第70个版本完全相同。
1)检出一个干净的工作副本。
2)向后合并更改。
svn merge -r100:70 http://repo.com/my/project/trunk

3) 检验一下,你的工作副本是否与你所期望的完全一致?如果是:

svn commit -m "回滚到r70时代"


4

既然你特别问到TortoiseSVN,你可以按照以下步骤操作:

  • 在你的工作目录中右键点击
  • 选择TortoiseSVN
  • 更新到指定版本
  • 点击日志(Log)
  • 选择你需要的版本(这会将版本号放入版本框中 - 如果你已经知道版本号,你也可以直接输入)
  • 点击确定(ok)

然后使用适当的信息提交你的更改到代码库。


当我试图将旧版本提交到主干时,我收到一个错误消息告诉我需要先更新它 - 这当然会将其恢复到HEAD版本... - Christian
2
我不得不进入日志,右键单击我想要的版本,“还原到此版本”,然后重新提交。对我来说,“更新到版本”无法正常工作... - Christian

2
你不需要将SVN回退,只需将你的工作副本回退,然后提交即可。
编辑:根据命令的不同(例如svn cp而不是cp),Subversion将记住文件的祖先(历史记录)。
你可以反向合并它,或者复制它。对于这个问题来说,复制可能是更好的选择。
如果我要做的话,我会这样做:
svn update
svn rm directory
svn ci -m "temporarily removed the content"
svn cp -r [revision] directory ./directory
svn ci -m "copied revision [revision] to current"

然而,可能更好的方法是:
svn update
svn merge -r HEAD:[revision] directory directory
svn ci -m "reverted back to [revision]"

对于我在“directory”处提到的一些位置,您可能需要使用存储库中位置的URL,例如,如果您只删除了根目录(因此没有剩余内容可供引用)。或者,通过合并,第一个是repo的URL,第二个是本地目录...虽然仅使用本地目录两次可能会起作用。请记住:如果它未正常工作,请勿将其检入:D(使用第二种方法具有这种优势...此外,它需要更少的数据传输)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接