SVN在服务器端的还原操作

4
一个非常聪明的开发人员删除了几乎整个存储库并提交了它(rev 210)。我在我的电脑上有一个工作副本,但存储库相当大。
我想创建一个新版本(211),它与最后一个好的版本(209)完全相同。我不希望保留来自错误提交的210版本的任何内容。这是开发者的问题,他们必须自己重新编写一切。
有什么好主意吗?

2
删除文件(或整个代码库)然后提交并不会导致任何数据丢失。这就是版本控制系统的全部意义,它可以在您犯错误时防止永久性地丢失数据。 - Ken Liu
5个回答

7
这可以通过反向合并来解决:
下面的命令将使你的工作副本返回到版本209的状态:
svn merge -c -210 .

然后提交:

svn ci -m "reverse merged revision 210"

3
如果开发人员没有在服务器上删除存储库,则您的所有代码都是安全的。您只需要创建一个新的空文件夹,然后从修订版本209而不是HEAD执行SVN checkout即可验证此操作。这将为您提供每个文件在修订版本209中的状态。您可以在任何开发工作站上执行此操作,无需在服务器上进行任何操作。
要恢复更改,只需在您的工作副本根目录中拉出SVN Show Log(如果使用TSVN)窗口,并选择修订版本209,然后选择还原到修订版本 - 这将对反向合并修订版本210中的更改进行操作,然后您可以将其作为修订版本211进行检查。这应该解决您的问题。
如果开发人员删除了您的SVN服务器上的存储库,则需要每日备份才能恢复代码。
只要您的服务器上的存储库完好无损,就不可能从SVN中删除任何内容。当您删除某些内容时,它只会从那一点开始变得不可见,但您始终可以返回存储库中任何文件的任何版本 - 您只需要进入正确的修订版本。

谢谢。问题已解决,非常感谢。我知道这段代码是安全的,我理解 SVN 的这一部分。我只是想创建一个与 209 完全相同的新版本(211)。非常感谢! - Scott Crooks
@ScottCrooks 我很高兴能够帮到你。如果可以的话,你介意采纳我的答案吗? - xxbbcc
对我来说可行,但你必须先检出头部,然后还原到修订版本等等... - SilentBob470

2

有一种不太好的方法适用于我...前提是您想要删除最后一次提交而不是中间某个提交。

首先-关闭svn服务器并通过svnadmin hotcopy repo repo_backup备份您的repo

进入SVN服务器并处理您的repo。查看./db/revs/X/,其中X是错误提交的第一个数字。您可以在那里看到错误的提交文件(例如123)。删除此文件,然后修改./db/current以指向之前的提交(例如122)。


1
运行得很好! - Elyahu

1

如果您正在使用Tortoise SVN,请稍微修改已接受的答案

  1. 更新到最新版本,本例中为版本号:210
  2. 打开仓库日志
  3. 选择要强制回退的版本,本例中为:209
  4. 选择还原到此版本
  5. 然后将更改作为新提交进行提交,版本号:211

-1

在Linux机器上一个基本的方法是:

cp PRJ ../../bkup
svn up PRJ
cp ../../bkup PRJ
cd PRJ
svn add *
svn ci -m "everything again" PRJ 

希望你明白了。

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