首页 > 解决方案 > 有没有办法将 gitignore 忽略的文件仅上传到特定的仓库?

问题描述

我们正在 Rails 中建立一个项目,事实上我们有两个用于此目的的 git 存储库,一个是 bitbucket(我们是否跟踪项目),另一个是 Heroku(生产)。我们必须将凭证文件上传到 Heroku,以便应用程序可以正常工作,但出于安全问题,我们不希望将该文件上传到 Bitbucket,所以我们的问题是:我们可以在 gitignore 文件中设置某种选项来上传凭证吗只向 Heroku 提交文件而不向 bitbucket 提交文件?提前致谢。

我们尝试通过 transfer.sh 和 gpg 上传文件,但我们宁愿不使用它,因为该文件在安全性方面非常脆弱。使用 heroku bash 创建文件也是不可能的,因为 Heroku 会自动删除它。

标签: gitkeygitignorecredentialsignore

解决方案


我们可以在 gitignore 文件中设置某种选项来将凭证文件上传到 Heroku 而不上传到 bitbucket 吗?

不,您可能可以做一些事情,尽管在存储库中存储凭据通常是错误的想法。

Git 与文件无关。Git 是关于提交的。提交包含文件,因此通过获取和使用提交,您可以获得这些文件,但 Git 的基本单元是提交。

同时,.gitignore 关于文件的——特别是在你的工作树中不会出现在未来提交中的文件。人们在这里遇到了一个绊脚石,因为您在 Git 称为index的东西中构建了的提交。但是,最后,如果忽略条目有效,那是因为它阻止了文件进入下一次提交。 这里的机制——文件——是完全不相关的。.gitignore

  • 如果您阻止文件进入下一次提交,该提交最终会进入 Bitbucket,那么,如果同一个提交进入 Heroku,那么该提交不会包含该文件。

  • 同样,如果您将文件放入最终进入 Heroku 系统的提交中,那么,如果并且当相同的提交进入 Bitbucket 时,该提交将继续拥有该文件。

这使情况变得清晰:如果提交有文件,则拥有该提交的人拥有该文件。 向 Heroku 发送您从未发送到 Bitbucket 的提交是可能的,但是由于 Git 通常是围绕着一种哲学设计的,即它倾向于将每个提交发送给每个人,因此请认真考虑您打算如何确保安全数据永不泄漏,在你尝试这个之前。

如果您无论如何都坚持这样做,请注意,.gitignore有时将文件放入特定提交中,有时将文件排除在特定提交之外,这可能是错误的机制。(这是因为只有当文件不在索引中.gitignore时,条目才会生效,并且检查具有该文件的任何提交,将该文件放入索引中,以便下一次提交也将具有该文件,而不管任何入口。).gitignore


推荐阅读