我正在通过 git 在 Heroku 上部署 Rails 应用程序(目前),并且还希望有一个公共版本供人们查看。有些文件是敏感的,只能在“heroku”分支中提交和推送,而不是在“public”分支中提交和推送。解决这个问题的最佳方法是什么?
(I do了解 Heroku 的配置变量,这作为临时解决方案非常有用,但如果我需要切换主机,那就不太有趣了。)
这两个分支不需要始终同步 - 我可以定期将“master”分支合并到“public”分支并将其单独推送到 github。
我尝试过各种事情:
.git/配置
[branch "public"]
excludesfile = +info/exclude_from_public
让私有和公共存储库共享相同的代码,但忽略公共存储库中的敏感文件的最佳方法是什么?
您可以假设尚未提交或推送任何代码,即这是一个新初始化的存储库。
(这个问题以前曾以各种形式被问过,但没有一个答案是直截了当的,或者答案似乎是really哈克。我只是想以一种非常简单的方式提出这个问题,并希望得到一个非常简单的答复。)
我将支持子模块的答案,但尝试提供一些说明。首先,git 不处理文件,而是处理提交。无法过滤分支中的文件或路径,因为分支实际上是指向提交的指针。当您排除或忽略时,您只是阻止将文件添加到存储库中。存储库中甚至没有任何“敏感文件”文件,只是在您的工作目录中。
子模块只是对存储在存储库中的另一个存储库的引用,以及检出存储库正在跟踪的特定提交。你可以说更新使用
git submodule update --recursive sensitive-files
为了简化事情,您可以在指向子模块路径的正确位置提交符号链接。
ln -sf sensitive-files/shadow passwd
然后像添加任何其他文件一样添加符号链接。
请记住,子模块只是一个签出的 git 存储库,您可以轻松限制对该实际存储库的访问并将主存储库公开。
Updated:
抱歉,如果您仍在处理此问题,我错过了通知。
您的私有存储库中可以有多个符号链接,引用在子目录中检出的私有存储库(子模块)。每个数据库或 Rails 实例使用的任何内容都可以是该私有子目录的符号链接。
另外,您不需要指向私有存储库的远程,只需要 .gitmodules 文件中的一个条目,该条目由git 子模块。您仍然需要保护私有存储库,以便只有您的 Heroku 实例可以访问它。为此,如果可以的话,我建议在服务器上安装 gitosis,或者使用其他一些私有 git 托管解决方案。将与您的实例私钥匹配的 ssh 公钥添加到允许的用户列表中。 (我不熟悉如何在 Heroku 中执行此操作。)
当您将更改推送到 heroku 时,它应该递归下载存储库中提到的所有子模块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)