在Subversion中,修改历史文件的最佳实践是什么?

时间:2009-03-28 20:11:03

标签: svn version-control

假设我有文件

helloworld.c
helloworld.m

15个编辑前,有人在helloworld.c中泄露了memroy,并设法将其变成了几个分支。我想在它设法进入的所有分支上更正历史上的那个版本。

还原文件并尝试重新检入文件的净效果是什么?显然,自那以后的14次变化我不想失去?

更新:我确信有人遇到过这个问题,我想知道他们找到了什么对他们有效以及为什么。

我是否认为管理分支和中继的方式是密集的,我必须在它存在的每个上下文中访问该文件?

5 个答案:

答案 0 :(得分:9)

您为什么要更正历史记录?这个伎俩一直让Star Trek陷入困境。

更好的是,在当前版本中进行更改 - 或者还原当前版本 - 并提交它。然后将更改合并到任何分支。

答案 1 :(得分:3)

您不想修改历史记录。历史记录是文件所经历的编辑序列 - 而不是您篡改的内容。

只需使用内存泄漏修复程序更新每个分支和主干的头部即可。通常,在新提交中引用您正在恢复旧的更改是一个好主意。例如:

  1. 人在r100中引入泄漏
  2. 团队在r101-r115中进行更改
  3. 使用提交消息提交r116:“由于内存泄漏而恢复r100”
  4. 祝你好运,

答案 2 :(得分:0)

您可以还原单个版本。可能存在冲突,但您可以解决它们。

或者您可以修复当前文件中的错误并提交它们。

答案 3 :(得分:0)

即使您恢复了主干上的更改,已经创建的分支也会出现问题 - 人们将不得不使用您的最新分支重新分支,或者只是将主干中的修复合并到他们的分支 - 我认为可能是如果这个问题对任何一个问题都是一个真正的问题,那就是最好的。

答案 4 :(得分:0)

不幸的是,您需要为每个头添加修复程序。 虽然我确信在技术上有一种方法可以使用svnadmin dump和dumpfilter来做这个技巧,但至少可以说是对历史的重写并要求重建你的存储库。

最新的tortoisesvn 1.6有一个非常好的修订图,可以让你找出所有变化的地方。