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

Ant*_*ton 2 git github heroku git-merge git-branch

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

通常我只是 .gitignore 配置文件并完全排除它们,但由于提交文件是将它们发送到 Heroku 的唯一方法,所以我不能这样做。

我想我可以通过创建两个分支来解决这个问题,我只需将它们推送到不同的遥控器,其中一个是前往 Heroku 的私有分支,另一个是 GitHub 上的公共分支。

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

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

我也愿意接受替代解决方案。
这些情况通常如何解决?
我觉得这并不是一个独特的情况。

Del*_*lan 5

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

如今,大多数云托管服务都允许您设置环境变量,并且将其用于敏感值被认为是良好的做法。

例如,您可以使用 heroku cli 设置环境变量,如下所示:

heroku config:set GITHUB_USERNAME=joesmith
Run Code Online (Sandbox Code Playgroud)

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

import os
print(os.environ['GITHUB_USERNAME'])
Run Code Online (Sandbox Code Playgroud)

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

环境变量的另一个优点是它们无处不在。几乎每个操作系统和云服务都支持它们,因此如果您想要开源项目并支持尽可能多的平台,那么您就不用担心它们了。