如何隐藏/加密部分GIT历史记录?

时间:2012-11-24 14:15:10

标签: git security encryption

我将为一个项目招募一些开发人员。如果可能的话,我想继续使用git repo,但我不想让历史记录的一部分可访问(通过加密),所以只有我才能接受它。原因是我在头脑中清理了某些专有信息,例如我在开发过程中硬编码到应用程序中的帐户密码。如果没有某种形式的身份验证,我不希望任何其他开发人员看到这一点。

显而易见的解决方案是创建一个新的回购头,但是如果可能的话我想保留完整的历史记录,因为它有分支我可能想要在路上使用。

3 个答案:

答案 0 :(得分:6)

如果是Git存储库,则无法隐藏历史记录的一部分;由于Git的工作方式,每次提交包括先前提交的哈希,为了使用Git存储库,您需要拥有完整的历史记录。

但是,您确实有一些选择。一种方法是使用当前内容启动一个新的存储库,并保留旧的存储库。然后,您可以将需要访问旧历史记录的任何人提供给旧存储库。您仍然可以在两个存储库中查看完整历史记录。您可以通过为旧的和新的每个添加远程数据来执行此操作,然后使用git replace将旧存储库的最后一次提交附加到新的第一次提交。有关详细信息,请参阅this question的答案。

另一种选择是过滤历史记录。您可以使用git filter-branch --tree-filter在历史记录中的每个提交上运行脚本,从而使用“密码”等替换所有密码实例。这将保留完整的历史记录,但所有提交都将获得新的提交ID。有关详细信息,请参阅this question的答案。

这两个选项都可以让您保留完整的历史记录,同时不会泄露您的密码。如果他们将更改实际的提交ID,请记住一件事,因此您需要确保从新的库中检出所有工作存储库,而不是旧库,或者您可能会意外地将旧历史记录推送到其中一个你的新回购。我建议更改旧回购中的任何密码以防万一,因为一旦它们在那里,可能很容易意外地揭示它们。

答案 1 :(得分:1)

由于git数据模型,这实际上是不可能的。你能尝试什么:

  1. 确定处理此类敏感数据的所有提交。

  2. 为这些提交做一个git rebase -i(取决于你的repo大小,这个交互式rebase可以和成千上万的提交一样深)并将这些提交放在HEAD之上

  3. 重置这些提交

  4. 强行推送

  5. (此将改变历史记录,但如果正确完成只会影响sha数字)

    您需要为所有分支机构执行此操作,这将很快失控。这就是为什么我会采用Gumbo的建议更改密码。

答案 2 :(得分:0)

我不确定这是最好的解决方案,但如果是我,我会创建一个新的回购并对它们进行集成。 Github已经走了很长的路要走。“