什么,我团队中的某个人犯了一个“错误”,删除了团队存储库当前版本中的几个文件。是否可以将当前本地版本更新为头部版本?当我单击提交时,subclipse 无法识别丢失的文件来上传它们。
提前致谢,
雷特
哦,为了皮特的爱!迄今为止的答案——充其量是——具有误导性。
从您的问题来看,听起来您正在尝试这样的事情:
svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"
除了那行不通。没有要提交的修改。您可以更新到旧版本,但不能在那里进行更改。你无法改变过去。您只能提交一个新的修订,以消除损坏。
好的,假设您的存储库位于 svn://repo。这里是一个简化的示例,其中文件夹trunk 包含两个文件“a”和“b”。我们称之为修订版 8 (r8)。
trunk # working copy of svn://repo/trunk
a
b
JR Hacker,一不小心把b删了:
svn rm b
svn commit -m "oops"
我们将生成的提交称为 r9。
因此,下次您从存储库更新时,
svn update
trunk
a
b消失!恐慌?不,这是一个版本控制系统。任何已签入的内容都可以恢复。这里有两种可能性:
只需从旧版本复制文件,即它仍然存在的最后一个版本: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(返回)到 r8。现在,对当前目录中的工作副本(第二个“.”)执行这些更改。
如果您只是还原单个更改,则有一种更方便的语法:
svn merge -c-8 . . #note the minus sign before the 8
如果您没有从命令行使用 svn,请稍微检查一下您的工具,您一定会找到一些东西。例如,当您从工作副本打开日志时,TortoiseSVN 具有方便的“从该版本恢复更改”。
从您的修订版中的某个位置(例如,您桌面上的临时文件夹)复制已删除的 SVN 文件,然后更新(这将删除原始文件,根据您同事提交的删除操作),然后将您的副本移回并将它们提交回SVN。
我会做以下事情:
在删除之前找到修订号...执行 svnadmin dump -r1:[goodrevisionnumber here] > file.dump。
然后,创建一个新存储库“svnadmin create [repository name]”,然后将转储加载到新存储库中。“svnadmin 加载 [newrepositoryname] < file.dump。
然后,签出此修订版,并将旧签出文件中的文件复制到新签出文件中并提交。