如何将Subversion存储库(而不是我的工作副本)还原到特定版本?

时间:2010-06-27 19:48:34

标签: tortoisesvn svn revert

我对来自Source Safe的Subversion相对较新,这让我疯狂。使用Tortoise接口,Commit继续在我的bin目录中显示.java文件,它说它“丢失” - 好吧,这是一个单独的问题。基本上,当我尝试了几件事来摆脱虚假的“bin”消息时,Tortoise反而删除了我的整个源目录。我尝试重新添加东西,但是当我添加时,它是新的,没有历史记录。

如何将Subversion恢复到特定版本?好像我从未发生过?我知道如何在VSS中执行此操作,但每次我在TortoiseSVN中尝试时,它只是修改我的工作副本。我不想再查看我的工作副本,因为这会让我失去我的所有历史。 Subversion可以忘记吗?

尝试查看stackoverflow,顺便说一句,但我发现最接近的事情是导出并重新导入整个存储库,我不认为我已经到了那一点。 Subversion必须能够做到这一点最简单!

3 个答案:

答案 0 :(得分:7)

Subversion不会忘记,但您可以执行以下操作:

假设您当前的修订版为100,并且您想要返回修订版70.您将创建修订版101,与70完全相同。

1)查看一份干净的工作副本。

2)合并(向后)变化。

svn merge -r100:70 http://repo.com/my/project/trunk

3)检查理智。你的工作副本是你想要的吗?如果是这样的话:

svn commit -m "rolled back to the good old days of r70

答案 1 :(得分:4)

由于您特别询问了TortoiseSVN,您可以执行以下操作:

  • 右键单击您的工作目录
  • TortoiseSVN的
  • 更新至修订
  • 点击日志
  • 选择您想要的修订版本(这会将修订版本号放入修订版本框 - 如果您已经知道版本号,则可以直接输入修订版本。)
  • 点击确定

然后只需使用适当的消息将更改提交到存储库。

答案 2 :(得分:2)

你没有带回SVN;你拿回你的工作副本,然后提交它。

编辑:取决于命令是什么(IE,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]"

对于我放置'目录'的某些地方,您可能必须使用存储库中位置的URL,例如,如果您刚删除了根目录(因此没有任何内容可供参考) 。无论是那个还是合并,第一个是repo的URL,第二个是本地目录......虽然它可能只使用本地目录两次。

记住;如果它不能正常工作,请不要检查:D (这是使用第二种方法的优势......而且,它需要更少的数据传输)