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

时间:2021-02-15 18:48:07

标签: git version-control gitignore api-key git-filter-branch

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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