我知道在Mercurial中,“历史是神圣的”。
但是,假设某人不小心提交了他们不应该提供的内容,例如包含密码或其他内容的设置文件。在任何人意识到它之前,我们甚至会说一段时间过去了,所以它一直在为几次提交而闲逛。显然,发现者然后从存储库中删除敏感数据。
有没有办法从提交历史记录中永久清除该文件或敏感数据,就好像它从未存在过一样?或者,这些敏感数据是永远永远属于回购的永久组成部分吗?
答案 0 :(得分:2)
有几种方法可以实现这一目标。所有这些都需要所有克隆了您的存储库的人员的合作,或者在引入更改后从中提取变更集。
使用哪种方法取决于已提交数据的确切性质以及它在历史记录中的位置。所有这些都需要使用Mercurial扩展,并且无法使用核心Mercurial完成。幸运的是,所有必需的扩展程序默认都附带Mercurial,只需启用即可。
我不会详细介绍这里的方法,因为有几个答案在问题中给出了不同的方法,这是一个骗局。我只想清楚,该问题中接受的答案在技术上是正确的,但没有用处。这实际上是可能的。
答案 1 :(得分:1)
我没有调查过钩子如何工作的细节,所以这个想法可能没有完全发挥出来。可以设置挂钩以禁止提交,推送和拉动敏感文件。在提交或推送(precommit and preoutgoing
)之前会有一些钩子。保护钩子以防止它们被绕开是另一个问题, Mercurial:The Definitive Guide 也讨论过。
答案 2 :(得分:1)
没有。并不是的。如果您可以说服有权访问删除和重新连接的所有人,则可以从将来的访问中删除该文件。
但是,如果您将您的root密码推送到公共Bitbucket回购 - ?你应该改变它。您的信息现已公开并泄露,应予以考虑。遗憾。
答案 3 :(得分:1)
如果且仅当此存储库未转义到野外时,您可以通过基本上克隆到新存储库,同时在过程中过滤敏感文件,从历史记录中删除文件, hg convert Hg Convert Extension doc here
通常,我们会在发布或交付给客户端之前审核存储库,例如带有密码的web.config或ini文件。
默认情况下不启用扩展,但是我使用的所有客户端都包含该扩展,您需要在Mercurial识别转换命令之前启用它。
如果使用Tortoise Hg或Kiln,例如:
或直接编辑Mercurial.ini:
[extensions]
convert =
转到存储库上方的目录(在我的示例中,我的存储库是HelloApp):
创建名为filemap.txt的文件
添加一行,其中包含要排除的文件名的完整路径。
exclude HelloApp/sensitive.config
打开命令提示符,cd到同一目录,包含你的filemap.txt,并运行hg convert
cd C:\projects
hg convert --filemap filemap.txt HelloApp HelloApp_clean
然后获取最新的工作副本:
cd HelloApp_clean
hg update
您需要使用干净的副本在服务器上创建一个新的克隆。