4

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

如何将 Subversion 带回特定版本?好像我从来没有发生过一样?我知道如何在 VSS 中执行此操作,但是每次我尝试使用 TortoiseSVN 时,它都会修改我的工作副本。我不想再检查我的工作副本,因为那会丢失我所有的历史记录。Subversion 可以忘记吗?

顺便说一句,已经尝试查看stackoverflow,但我发现最接近的事情是导出和重新导入整个存储库,我认为我还没有到那个时候。Subversion 一定能做到这最简单的事情!

4

3 回答 3

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"

于 2010-06-27T19:58:39.133 回答
4

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

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

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

于 2010-06-27T20:17:36.073 回答
2

你不把 SVN 拿回来;你拿回你的工作副本,然后提交它。

编辑:根据命令是什么(IE,svn cp 而不是 cp),颠覆会记住文件的祖先(历史)。

您可以反向合并它,也可以复制它。复制可能是更好的选择。

如果我要这样做,我会这样做:

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 中检查它(这是使用第二种方法的优势......而且,它需要更少的数据传输)

于 2010-06-27T19:54:46.710 回答