我们将git用于我们在商店中构建的大多数Web应用程序,尽管这些应用程序本身使用了多种技术(PHP,Rails等),但通常每个站点都有一个临时服务器和生产服务器。通常,这些服务器具有不同的数据库凭据集以及不同的基于环境的配置设置(例如缓存)。我们的工作流通常涉及为每个项目维护两个git分支:master(反映生产服务器)和staging(反映阶段)。新功能是在登台(或子分支)上开发的,并在完成和部署后合并回主服务器。
我的问题是关于维护特定于分支机构和环境的配置文件的最佳方法。我已经看到类似问题here和here的答案,但都没有真正令人满意。两种主要方法似乎是a)使用.gitignore排除功能将配置文件保留在git的权限范围之外,或者b)编写反射性的,环境感知的代码来确定例如根据主机名使用什么数据库凭据。我与a)的问题是,它仅允许一组配置文件存在于代码库中(与当前分支无关),因此其他环境的配置文件会丢失。 b)另一方面,似乎只需要以与应用程序功能无关的方式来不必要地修改代码库。
理想情况下,我想一种在某个分支内“锁定”配置文件的方法,这样,每当我检出master时,我都会得到主配置文件,而当我检出staging时,我就会得到staging配置文件。此外,将分段合并到主服务器中不应以任何方式影响主服务器配置文件。迄今为止,我们已经通过在git根目录之外具有包含特定于环境的配置文件的文件夹并在部署时手动将适当的文件移动到代码库中来解决此问题,但这当然是毫无用处的(并且可能很危险)。
有没有办法使用git完成此操作?
感谢您的考虑!
例如,您可能已经在git中签入了“ config.staging”和“ config.production”,并且在部署到暂存时,安装工具选择“ config.staging”以复制到“ config”。或者,您可能只有一个“ config.template”文件,该文件将被模板化以在部署中创建“ config”。
该概念基本上是编写这些钩子以充当微型“ make install”脚本,以确保按分支,按主机,根据其他文件的存在或内容以及您喜欢的任何内容进行正确的配置。这些钩子甚至可以重写您的配置文件或通过填充模板来重新创建它们。
master
仅保存staging
中已经存在的提交。如果向master
添加了一个额外的提交,其中包含两个分支之间的配置差异,则在从staging
提取的内容之上重新部署此提交应可维护配置。这并不像“将分段合并到主文件不应该以任何方式影响主配置文件”那样简单,但是由于在这些情况下您会遇到合并冲突,因此它可能已经足够接近了。