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

Hen*_*sel 1 subclipse svn

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

提前谢谢,
rAyt

ben*_*din 9

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

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

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"
Run Code Online (Sandbox Code Playgroud)

除此之外不行.没有提交修改.您可以更新到较旧的版本,但不能在那里进行更改.你无法改变过去.您只能提交新版本,撤消损坏.

好的,我们假设您的存储库位于svn:// repo.这里是一个简化的例子,其中文件夹主干包含两个文件"a"和"b".我们称之为第8版(r8).

trunk    # working copy of svn://repo/trunk
    a
    b
Run Code Online (Sandbox Code Playgroud)

JR Hacker,滑倒并意外删除b:

svn rm b
svn commit -m "oops"
Run Code Online (Sandbox Code Playgroud)

让我们调用生成的提交r9.

所以,下次从存储库更新时,

svn update

trunk
    a
Run Code Online (Sandbox Code Playgroud)

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

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

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"
Run Code Online (Sandbox Code Playgroud)

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

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"
Run Code Online (Sandbox Code Playgroud)

阅读此合并的方法是:

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

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

svn merge -c-8  . . #note the minus sign before the 8
Run Code Online (Sandbox Code Playgroud)

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