SVN在服务器端恢复

时间:2012-01-29 03:53:01

标签: svn commit revert

非常聪明的 开发人员几乎删除了整个存储库并提交了它(rev 210)。我的计算机上有一个工作副本,但存储库相当大。

我想创建一个与上一个好的修订版(209)相同的新版本(211)。我不想保留修订版210中的任何内容,这是错误的提交。这是开发人员的错误,就我而言,他们将不得不改写任何东西。

想法?

5 个答案:

答案 0 :(得分:7)

这可以通过reverse-merging来解决:

以下命令会将您的工作副本返回到修订版209的状态:

svn merge -c -210 .

然后提交:

svn ci -m "reverse merged revision 210"

答案 1 :(得分:3)

如果该开发人员没有删除服务器上的存储库,则所有代码都是安全的。要验证这一点,您需要做的就是创建一个新的空文件夹,然后从修订版209而不是HEAD执行SVN签出。这将为您提供其状态中的每个文件以进行修订版本20.您可以在任何开发工作站上执行此操作,无需在服务器上执行任何操作。

要恢复更改,只需在工作副本根目录中拉出SVN显示日志(如果使用TSVN)窗口并选择修订版209,然后选择恢复到修订版本 - 这将对修订版本210中的更改进行反向合并然后您可以将其作为修订版211签入。这应该可以解决您的问题。

如果开发人员删除了SVN服务器上的存储库,则需要每日备份才能恢复代码。

只要服务器上的存储库完好无损,就无法从SVN中删除任何内容。当你删除某些内容时,它从那一点开始变得不可见,但你总是可以回到存储库中任何文件的任何版本 - 你只需要去正确的版本。

答案 2 :(得分:1)

如果您使用的是乌龟 SVN,请稍微修改已接受的答案

  1. 更新到最新版本在这种情况下版本:210
  2. 打开仓库日志
  3. 选择在这种情况下必须强制的修订版:209
  4. 选择恢复到此修订版
  5. 然后将更改提交为新的提交修订版:211

答案 3 :(得分:0)

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

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

希望你明白这一点

答案 4 :(得分:0)

有一种丑陋的方式对我有用......只要你想要删除最后一次提交而不是中间提交。

首先 - 关闭svn服务器并按svnadmin hotcopy repo repo_backup

备份您的回购

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