非常聪明的 开发人员几乎删除了整个存储库并提交了它(rev 210)。我的计算机上有一个工作副本,但存储库相当大。
我想创建一个与上一个好的修订版(209)相同的新版本(211)。我不想保留修订版210中的任何内容,这是错误的提交。这是开发人员的错误,就我而言,他们将不得不改写任何东西。
想法?
答案 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,请稍微修改已接受的答案
答案 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)。