包含敏感数据的私有和 public Git 存储库

Private and public Git repositories with sensitive data

我目前 运行 在 Heroku 上有一项服务。
使用 Heroku 进行部署的方式是将代码推送到 git 存储库,这会触发构建并随后部署新代码。
由于这是将服务部署到 Heroku 的唯一方法,因此 git 存储库包含许多敏感信息,例如一些配置文件中的令牌和客户端机密。 因此,该存储库目前是一个私有存储库,但我想将它变成一个 public。

通常我只是。git忽略配置文件并完全排除它们,但由于提交文件是将它们传送到 Heroku 的唯一方法,我不能那样做。

我想我可以通过有两个分支来解决这个问题,我只需将它们推送到不同的遥控器,其中一个是去 Heroku 的私有分支,一个是 public 上的 GitHub ].

在开发过程中,我会推送到私有分支,然后将这些更改(减去配置)合并到 public 分支,一切都会很好。 不幸的是,这样做会导致合并包含私有分支的所有历史记录,其中包括敏感数据,所以这是不行的。

是否可以用其他方式做到这一点?

我也愿意接受其他解决方案。
这些情况一般是怎么解决的?
我觉得这不可能真的是一个独特的情况。

您可以使用 Heroku 的 Config Vars 来存储您的敏感数据。您将能够从您的代码中以环境变量的形式访问数据。

现在大多数云托管服务都让您能够设置环境变量,并且考虑good practice将其用于敏感值。

例如,您可以像这样使用 heroku cli 设置环境变量:

heroku config:set GITHUB_USERNAME=joesmith

大多数编程语言都提供了一种访问环境变量的方法。例如,对于 Python,您可以使用:

import os
print(os.environ['GITHUB_USERNAME'])

无论您目前在哪里使用敏感数据,您都可以将其替换为环境变量。

环境变量的另一个优点是它们无处不在。几乎所有的操作系​​统和云服务都支持它们,所以如果你想开源你的项目并支持尽可能多的平台,它们就少了一件需要担心的事情。