将一个文件移到另一个文件之后组合颠覆历史记录?

时间:2014-08-11 22:30:28

标签: svn merge

在subversion存储库中,有一个具有很长变化历史的二进制文件(MS Word文档)。最近,该文件被以下有问题的操作修改,丢失了历史记录。首先,制作副本并将其提交到存储库:

$ cp original.docx copy.docx
$ svn add copy.docx
$ svn commit

接下来,编辑并多次提交副本。 (original.docx从未被修改过。)

最后,原始文件被使用" svn mv"的副本替换:

$ svn mv original.docx oldjunk.docx
$ svn mv copy.docx original.docx
$ svn commit

这很糟糕,因为" original.docx"的历史很多。不再被" svn log original.docx" - 历史记录在" oldjunk.docx"。

作者打算在#j; oldjunk.docx" svn rm oldjunk.docx"在未来,这将失去所有的历史。允许该命令的最佳颠覆操作顺序是什么:

$ svn log original.docx

显示追加历史(现在称之为)original.docx和oldjunk.docx?

请记住这些是二进制文件,因此我们无法随意合并内容。

谢谢。

1 个答案:

答案 0 :(得分:0)

  1. svn log original.docx now 必须显示copy.docx original.docx的历史记录 (由于正确的重命名)
  2. 甚至从仍然存储在历史记录中的存储库文件中删除,并且可以从存储库中提取此历史记录(阅读有关PEG修订版):即如果在{REVISION中删除oldjunk.docx(您可以从{{找到此修订版本) 1}}),对于svn log -v中的$N = $REVISION - 1,您将能够获得original.docx + oldjunk.docx的历史记录
  3. 你可以(理论上)在存储库中使用大量技巧和黑魔法重写历史记录,并通过正确的修改替换svn log oldjunk.docx@K,但是:

    • 这将需要大量精确的工作
    • 它需要管理级别访问存储库和存储库服务器(必须在进程中创建中间存储库)