2009-07-23 301 views
1

什么是我团队中的某个人“错误地”删除当前版本的团队存储库中的多个文件。是否有可能将当前的本地版本更新为头版本?当我点击提交时,subclipse无法识别丢失的文件来上传它们。SVN - 将完整本地副本更新为HEAD版本

由于提前,
rAyt

+0

我不太明白你的问题,但在你尝试任何事情之前,先用本地修订版快速备份目录。 – Elijah 2009-07-23 17:44:51

+0

对不起,纠正了一句话。应该现在更有意义。 – 2009-07-23 17:47:55

回答

9

哦,对皮特!的爱。答案迄今已经 - 充其量 - 误导

从你的问题,这听起来像你正在尝试这样的事:

svn update -r8 
# ok, I can see the deleted file now 
svn commit -m "I want r8 to be newest" 

除了将无法正常工作没有修改。提交,你可以更新到旧版本,但你不能在那里做出改变。你不能改变过去。你只能提交一个新的修订版,撤销损坏。

好吧,让我们假设你的仓库位于svn:// repo。 这里是一个简化的例子,其中文件夹中包含两个文件“a”和“b”。我们称之为修订版8(r8)。

trunk # working copy of svn://repo/trunk 
    a 
    b 

J.R.黑客,滑倒了,不小心删除B:

svn rm b 
svn commit -m "oops" 

让我们把所得到的承诺R9。

所以,下一次你从库中更新,

svn update 

trunk 
    a 

b消失!恐慌?不。这是一个版本控制系统。任何已签入的内容都可以恢复。这里有两种可能性:

只是副本从旧版本的文件,即它仍然存在的最后修订:8

svn cp svn://repo/trunk/[email protected] . 
svn commit -m "restored b from revision 8" 

更一般的解决方案是使用一个合并。你可以使用这种技术来消除不仅仅是一个流浪的删除。

svn merge -r9:8 . . 
svn commit -m "reverted the changes made in revision 8" 

阅读本合并的方式是:

首先要弄清楚什么样的变化需要作出从R9(回)来获取到存储库文件夹的R8(SVN://回购/主干)与当前目录相关联(第一个“。”)。现在,在当前目录中的工作副本上执行这些更改(第二个“。”)。

还有一个更方便的语法,如果你只是还原一个变化:

svn merge -c-8 . . #note the minus sign before the 8 

如果你不使用SVN命令行,闲逛的工具一点,你一定要找东西。例如,当您从工作副本中打开日志时,TortoiseSVN具有方便的“从此修订中恢复更改”。

1

采取删除功能于SVN从修订文件的地方(例如,桌面上的一个临时文件夹),然后更新(这将删除原始文件的副本,根据你的同事犯下的删除行为),然后移回你的副本并将它们提交回SVN。

+0

这种方法将失去与意外删除文件的历史连接,并且会在资源库中存储两次相同的文件(内容),除非您在服务器上至少使用svn 1.6。 – bendin 2009-07-24 09:02:57

0

我会做到以下几点:

找到之前删除的版本号......做一个svnadmin的转储-r1:[goodrevisionnumber这里]> file.dump。

然后,创建一个新的存储库“svnadmin create [repository name]”,然后将转储装载到新的存储库中。 “svnadmin的负载[newrepositoryname] < file.dump。

然后,看看这个版本和文件从旧结账复制到新的和提交。

+0

那么我们是否会放弃之前的所有修订版本? – 2009-07-23 17:49:00

相关问题