我有一个服务当前正在 Heroku 上运行.
Heroku 的部署方式是将代码推送到 git 存储库,这将触发构建并随后触发新代码的部署。
由于这是将服务部署到 Heroku 的唯一方法,因此该 git 存储库包含大量敏感信息,例如一些配置文件中的 token 和客户端 secret 。
因此,该存储库目前是一个私有(private)存储库,但我想将其变成一个公共(public)存储库。
通常我只是 .gitignore 配置文件并完全排除它们,但由于提交文件是将它们发送到 Heroku 的唯一方法,所以我不能这样做。
我想我可以通过创建两个分支来解决这个问题,我只需将它们推送到不同的 Remote ,其中一个是前往 Heroku 的私有(private)分支,另一个是 GitHub 上的公共(public)分支。
在开发过程中,我会推送到私有(private)分支,然后将这些更改(减去配置) merge 到公共(public)分支,一切都会好起来的。 不幸的是,这样做会导致 merge 包含来自私有(private)分支的所有历史记录,其中将包含敏感数据,因此这是不行的。
是否可以通过其他方式做到这一点?
我也愿意接受替代解决方案。
这些情况通常如何解决?
我觉得这并不是一个独特的情况。
最佳答案
您可以使用 Heroku 的 Config Vars存储您的敏感数据。您将能够从代码中以环境变量的形式访问数据。
现在大多数云托管服务都允许您设置环境变量,并且它被认为是 good practice将其用于敏感值。
例如,您可以使用 heroku cli 设置环境变量,如下所示:
heroku config:set GITHUB_USERNAME=joesmith
大多数编程语言都提供了访问环境变量的方法。例如,对于 Python,您可以使用:
import os
print(os.environ['GITHUB_USERNAME'])
无论您当前在何处使用敏感数据,都可以将其替换为环境变量。
环境变量的另一个优点是它们无处不在。几乎每个操作系统和云服务都支持它们,因此如果您希望开源项目并支持尽可能多的平台,那么您就不用再担心它们了。
关于git - 包含敏感数据的私有(private)和公共(public) Git 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696063/