SVN - 将完整的本地副本更新为HEAD版本

时间:2009-07-23 17:39:31

标签: svn subclipse

什么,我团队中的某个人犯了“错误”,删除了当前版本的团队存储库中的几个文件。是否可以将当前本地版本更新为主版本?当我点击提交时,subclipse无法识别丢失的文件以上传它们。

提前致谢,
rAyt

3 个答案:

答案 0 :(得分: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
消失了!恐慌?不。这是一个版本控制系统。任何已签入的内容都可以恢复。这有两种可能性:

只需复制旧版本的文件,即它仍然存在的最新版本:8。

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

更通用的解决方案是使用合并。您可以使用此技术撤消除杂散删除之外的其他内容。

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

阅读此合并的方法是:

首先弄清楚需要进行哪些更改才能从与当前目录(第一个“。”)关联的存储库文件夹(svn:// repo / trunk)的r9(back)到r8。现在,在当前目录中的工作副本上执行这些更改(第二个“。”)。

如果您只是还原一个更改,那么语法更方便:

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

如果你没有从命令行使用svn,请稍微捅一下你的工具,你肯定会找到一些东西。例如,当您从工作副本中打开日志时,TortoiseSVN具有方便的“从此修订版还原更改”。

答案 1 :(得分:1)

从某个地方的修订版中获取已删除的SVN文件的副本(例如,桌面上的临时文件夹),然后更新(根据同事提交的删除操作,将删除原始文件),然后移动你的副本回来并将它们提交回SVN。

答案 2 :(得分:0)

我会做以下事情:

在删除之前找到修订号...执行svnadmin dump -r1:[goodrevisionnumber here]> file.dump。

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

然后,查看此修订版,并将旧结帐中的文件复制到新版本并提交。