2010-06-27 46 views
4

我是Subversion的新手,来自Source Safe,它让我疯狂。使用Tortoise界面,Commit不断在我的bin目录中显示我的.java文件,它说这是“缺失” - 好吧,这是一个单独的问题。基本上,当我尝试了几件事来摆脱虚假的“bin”消息时,Tortoise却删除了我的整个源代码目录。我尝试重新添加东西,但是当我添加时,它以新的方式出现,没有历史记录。如何将Subversion存储库(不是我的工作副本)还原为特定的修订版本?

如何将Subversion带回特定修订版本?仿佛我从未发生过?我知道如何在VSS中做到这一点,但每次我尝试在TortoiseSVN时,它只是修改我的工作副本。我不想再检查我的工作副本,因为这会让我失去我所有的历史。 Subversion可以忘记吗?

尝试寻找在stackoverflow中,顺便说一句,但我发现最接近的东西是导出和重新导入整个存储库,我不认为我在那个点上。 Subversion必须能够做到这一点最简单的事情!

回答

4

既然你特别问了一下TortoiseSVN,你可以做到以下几点:

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

然后,只需提交你的资料库的修改与相应的消息。

+0

谢谢,我现在没有权限访问存储库。 – orbfish 2010-06-28 15:33:53

+0

当我尝试将旧修订版提交到主干时,我收到一条错误消息,告诉我需要先更新它 - 这当然会将其恢复为HEAD修订版... – Christian 2014-06-27 09:17:03

+1

我必须进入日志,点击我想要的修订版本,“恢复到此版本”,然后重新提交。 “更新修改”对我不起作用... – Christian 2014-06-27 10:13:03

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,例如,如果你刚刚删除了根目录(因此没有什么可以引用的)。无论是或合并,第一个是回购的URL,第二个是本地目录...虽然它可能会使用本地目录两次。

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

6

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

相关问题