隐藏 github 公共存储库中的 API 密钥

问题描述

我正在寻找一种方法来防止 api 密钥等出现在公共存储库中。 (它的托管地点实际上并不重要)

所以我知道常见的解决方案是将包含 api 密钥的文件添加到 .gitignore 中,这样它基本上永远不会被提交到 repo。

问题是我宁愿提交文件,但将密钥本身替换为“您的 API 密钥在这里”之类的文本。

我发现 this 的答案建议使用 git filter branch,但它似乎真的很受欢迎,并不推荐。

有没有其他方法可以实现这一目标?有什么方法可以确保 git filter branch 实际工作?有什么办法可以追溯吗?应该在 git add 之后还是之前完成?

解决方法

您建议的合理做法是:创建一个包含配置文件和填充符或占位符数据的模板文件,然后将其复制到您想要的位置,该位置在 .gitignore 中列出.如果您愿意,您实际上可以拥有一个脚本来生成文件并提供 API 密钥作为命令行参数或从环境中提供。

另一种方法是始终从环境中导入配置,而从不将配置写入磁盘。在许多环境中,这可以使用 Vault 等加密的秘密存储来完成,但也有其他选择。

这两种方法都根本不会提交机密,因此您不必担心它们最终会出现在代码库中。如果它们已经在代码库中,那么您需要使用 git filter-branch 或类似工具将它们过滤掉,或者只是旋转它们并假设旧值受到损害(您可能应该首先假设).

,

你读过.git/info/exclude吗?它在同一个 manpage as gitignore 中进行了描述,并且本质上允许您在存储库级别本地指定不想被 Git 看到的模式。此处的模式语法与 .gitignore 中的相同。

这将允许您最初提交占位符配置文件,然后在本地修改 .git/info/exclude。然后,您可以安全地将实际的 API 密钥放入该文件中 - 执行此操作时,请运行 git status 以确认您的配置文件更改已被排除。

关于此here还有另一个问答。