保护 git 个特定于部署的文件

Protecting git deployment-specific files

这是一个关于 git 的非常普遍的问题 - 考虑以下示例的服务器应用程序。

上下文:假设你的repo中有几个分支,其中'staging'和'deploy'。要开发应用程序,您可以使用具有特定开发配置文件的私有机器。您的应用程序即将部署到 public 台机器上。但是 public 机器需要不同的配置文件(例如,它必须访问特定的数据库)。

问题: 如果我在 'staging' 中提交我的配置文件,做一些更改,然后合并到 'deploy',它将覆盖我的部署配置文件,这是不正确的。如果我不跟踪我的配置文件,我随时可能会丢失它们。

问题:我怎样才能保护两个分支中的两个文件,以便任何时候都不会丢失?如何将这些文件分配给它们所属的分支机构?有没有办法透明地完成这一切,这样我就可以使用 git 的常用机制而不必考虑这些文件?

谢谢!

根据我的经验,分支不是正确的方法。尝试将开发和部署分离到单独的存储库中。您的应用程序存储库不应包含用于生产部署的配置文件。可用于本地部署的默认配置通常很好。

出于以下原因,其他任何内容都应保留在源代码存储库之外:

  • Branching/merging 您上面提到的问题。
  • 您不知道在所有情况下您的应用程序将部署到哪些服务器。在许多组织中,runtime/production 环境的部署和操作将由不同的团队处理 - 他们最了解您的应用程序将 运行 在哪些服务器上,您不需要在其中提供此信息你的源代码仓库。

如果您仍想跟踪配置(通常这是个好主意),

  • 创建一个单独的配置 repo 并使用上面评论中描述的命名方法 (file-uat.config, file-production.config) - 你也可以在同一个 repo 中使用目录,所以一个目录包含所有uat 文件,一个所有的生产文件,等等。或者
  • 为每个部署环境创建一个单独的存储库,例如myapp-config-uatmyapp-config-production

这些方法中的任何一种都应该与脚本解决方案配合使用,脚本解决方案将自动 cloning/updating 配置文件到相关环境中。