1

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

提前致谢,
雷特

4

3 回答 3

9

哦,为了皮特的爱!迄今为止的答案——充其量是——具有误导性。

从您的问题来看,听起来您正在尝试这样的事情:

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 具有方便的“从该版本恢复更改”。

于 2009-07-23T20:10:38.683 回答
1

从您的修订版中的某个位置(例如,您桌面上的临时文件夹)复制已删除的 SVN 文件,然后更新(这将删除原始文件,根据您同事提交的删除操作),然后将您的副本移回并将它们提交回SVN。

于 2009-07-23T17:46:14.230 回答
0

我会做以下事情:

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

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

然后,签出此修订版,并将旧签出文件中的文件复制到新签出文件中并提交。

于 2009-07-23T17:47:56.100 回答