【问题标题】:How do I hide/encrypt portions of GIT history?如何隐藏/加密部分 GIT 历史?
【发布时间】:2012-11-24 14:15:09
【问题描述】:

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

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

【问题讨论】:

  • 更改账户密码。
  • 不幸的是,我在任何地方都使用这些密码,我什至不想给任何人提示我的密码选择启发式方法。
  • 嗯,这是另一个错误:密码重用。
  • git filter-branch 绝对是获得你想要的东西的方法。尽管更改密码而不重复使用也是一个负责任的决定。

标签: git security encryption


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    2. 为这些提交执行 git rebase -i(取决于您的存储库大小,此交互式 rebase 可以达到数千次提交)并将这些提交放在 HEAD 之上

    3. 重置那些提交

    4. 用力推动

    (这会改变历史记录,但如果操作正确只会影响 sha 编号)

    您需要对所有分支机构都这样做,这很快就会失控。这就是为什么我会接受 Gumbo 更改密码的建议。

    【讨论】:

      【解决方案3】:

      我不确定这是不是最好的解决方案,但如果是我,我会创建一个新的存储库并在它们之间进行集成。 Github 为使这一切变得更容易做了很多工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-17
        • 2017-09-26
        • 2014-09-29
        • 1970-01-01
        • 2015-07-24
        • 2017-04-18
        • 2021-09-03
        相关资源
        最近更新 更多