题
什么,我团队中的某人犯了一个“错误”,以在团队存储库的当前修订中删除几个文件。是否可以将当前本地版本更新为Head修订版?当我单击“提交”时,子插图没有识别丢失的文件来上传它们。
提前致谢,
雷特
解决方案
哦,因为对皮特的热爱!到目前为止,答案充其量是误导性的。
从您的问题中,听起来您正在尝试这样的事情:
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
JR黑客,滑倒并意外删除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具有方便的“从此修订版中恢复更改”。
其他提示
从某个地方的修订中获取删除的IN-SVN文件的副本(例如,桌面上的临时文件夹),然后更新(根据您的同事的承诺删除操作,将删除原始文件,然后将副本移回去并将他们归还给SVN。
我会做以下操作:
在删除之前查找修订号...进行SVNADMIN转储-R1:[goodRevisionNumber there]> file.dump。
然后,创建一个新的存储库“ svnadmin创建[存储库名称]”,然后将转储加载到新的存储库中。 “ svnadmin load [newRepositoryName] <file.dump。
然后,查看此修订版,然后将文件从旧结帐中复制到新文件并提交。