如何永久删除Mercurial的变更集?

时间:2012-08-06 09:44:19

标签: mercurial

昨晚深夜,我最终将生产登录详细信息检入存储库。由于我现在是唯一一个从事这方面工作的开发人员,这不是什么大问题,但将来暴露生产细节并不是很好。

我最终做的是进入服务器:

hg clone <old repo> <new repo> -r <revision>

仅在错误提交之前克隆到修订版并删除

我测试了它,看起来很好。我想我在这里要求更好一点确定,我是否真的确保没有隐藏的历史或隐藏的足迹来揭露那个糟糕提交的内容?

非常感谢,

2 个答案:

答案 0 :(得分:1)

别担心。删除<old repo>后,它肯定消失了。虽然法医专家可能仍会在磁盘上的已删除块中找到一些有趣的东西。

答案 1 :(得分:0)

您的clone命令将起作用,但如果您的存储库有多个分支,则该克隆将不包含它们。因此,除非你小心地将它们单独拉出来,否则你可能会失去比预期更多的东西。可能这不是你想要的......

删除修订的最简单方法是使用MQ extension中的strip命令。您可以将此选项与rebase命令(Rebase extension)结合使用,以删除已包含要保留的子项的变更集;首先rebase将孩子放到父母身上,然后strip将违规的变更设置为clone

请注意,这些是历史记录修改操作,因此如果变更集已经与其他用户共享,它仍将在其存储库中。即使他们拉了之后。他们需要重复你的步骤来摆脱它们,这对屁股来说是相当痛苦的。这种变化甚至可能意外地以这种方式返回主存储库。 (注意:这也适用于您的{{1}}方法。)

因此,如果您需要这样做,最好指示所有用户进行新的克隆,或者至少删除更改,并制作一个钩子以防止重新引入变更集。如果您无法联系和/或信任所有用户(例如,因为它是开源的),可能最好将变更集留在那里,只需更改您的生产凭据。无论如何它已经在野外了。

将来有更好的方法可以使用Mercurial 2.4的“废弃”功能删除或更改变更集。一旦完全实现,当用户从您的存储库中取出时,他们的存储库的历史记录可以相应地自动更新。所以要留意这个功能。