2012-01-29 106 views
2

A 非常聪明开发人员几乎删除了整个存储库并提交了它(rev 210)。我的电脑上有一份工作副本,但版本库相当庞大。SVN在服务器端恢复

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

想法?

+0

切换到git的时间 – 2012-01-29 03:57:45

+1

触发该开发人员的时间 – 2012-01-29 04:11:26

+2

删除文件(或整个存储库)然后提交不会导致任何内容丢失。这是版本控制系统的重点,如果你犯了错误,它可以防止永久性丢失。 – 2012-01-29 04:22:22

回答

1

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

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

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

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

+0

谢谢。这解决了这个问题。非常感激。 我知道代码是安全的,我理解SVN的一部分。我只是想创建一个完全像209的新版本(211)。非常感谢! – 2012-01-29 06:37:07

+0

@ScottCrooks我很高兴它有帮助。你介意在这种情况下接受我的答案吗? – xxbbcc 2014-06-06 16:37:46

0

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

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

希望你明白了吧

7

这可以通过reverse-merging解决:

以下命令将返回你的工作副本修订状态209:

svn merge -c -210 . 

然后com麻省理工学院:

svn ci -m "reverse merged revision 210" 
0

有这对我的作品一个丑陋的方式......只要你想删除的最后一次提交,而不是一些在中间提交。

首先 - 关机SVN服务器和备份您的回购由svnadmin hotcopy repo repo_backup

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