git - 包含敏感数据的私有(private)和公共(public) Git 存储库

标签 git github heroku git-branch git-merge

我有一个服务当前正在 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/

相关文章:

eclipse - 代码模板的 Git 关键字

git - 如何在没有提交消息的情况下获取 git log

git - 使用 GitHub blob api 获取文件的所有版本

Javascript 功能在 localhost 上工作,但在部署到 Heroku 时不工作

git checkout master 错误 : pathspec 'master' did not match any file(s) known to git

git - 如何排除带有 "git diff"的补丁 header ?

git - 删除两个提交之间的 git 提交

git - 无法在 GitHub 上将我的第二封邮件提交为 "verified"

node.js - 在 Heroku 上找不到 Jade 模板

macos - Heroku cli (brew install heroku) : ArgumentError: user emixam23 doesn't exist