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

时间:2019-04-15 19:28:53

标签: git github heroku git-branch git-merge

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

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

我认为我可以通过建立两个分支来解决此问题,这些分支可以简单地推送到不同的远程站点,其中一个是去Heroku的私有分支,另一个是GitHub上的公开分支。

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

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

我也欢迎其他解决方案。
通常如何解决这些情况?
我觉得这真的不是唯一的情况。

1 个答案:

答案 0 :(得分:3)

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

如今,大多数云托管服务使您能够设置环境变量,并且good practice可以将其用于敏感值。

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

heroku config:set GITHUB_USERNAME=joesmith

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

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

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

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