1

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

我最终做的是在服务器上进行:

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

只克隆到错误提交之前的修订版并删除

我测试了它,它似乎很好。我想我在这里问得更好,以确保,我是否真的确保周围没有隐藏的历史或隐藏的足迹来暴露那个错误提交的内容?

非常感谢,

4

2 回答 2

1

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

于 2012-08-06T11:20:32.357 回答
0

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

删除修订的最简单方法是使用MQ 扩展strip中的命令。您可以将其与命令(Rebase 扩展)结合使用,以删除已经有要保留的子项的变更集;首先是孩子到父母,然后是有问题的变更集。rebaserebasestrip

请注意这些是修改历史记录的操作,所以如果变更集已经与其他用户共享,它仍然会在他们的存储库中。即使在他们拉动之后。他们将需要重复您的步骤才能摆脱它们,这非常令人头疼。更改甚至可能以这种方式意外地回到主存储库中。(注意:这也适用于您的clone方法。)

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

将来会有更好的方法来删除或更改变更集,其中包含“废弃”功能,计划用于 Mercurial 2.4。一旦完全实现,当用户从您的存储库中提取时,他们的存储库历史可以相应地自动更新。因此,请留意该功能。

于 2012-08-07T09:00:31.363 回答