【发布时间】:2011-03-13 22:38:09
【问题描述】:
对于我们在商店中构建的大多数 Web 应用程序,我们使用git,尽管这些应用程序本身使用了多种技术(PHP、Rails 等),但我们通常为每个站点都有一个登台和生产服务器。通常,这些服务器具有不同的数据库凭据集以及不同的基于环境的配置设置(例如缓存)。我们的工作流程通常涉及为每个项目维护两个 git 分支:反映生产服务器的 master 和反映 staging 的 staging。新功能在 staging(或子分支)上开发,并在完成和部署后合并回 master。
我的问题是关于维护特定于分支和环境的配置文件的最佳方式。我已经看到类似问题here 和here 的答案,但都不是很满意。主要的两种方法似乎是 a) 使用 .gitignore 排除将配置文件留在 git 的权限之外,或者 b) 编写反射的、环境感知的代码来确定例如根据主机名使用什么数据库凭据。我对 a) 的问题是它只允许一组配置文件存在于代码库中(与当前分支无关),因此其他环境的配置文件会丢失。 b) 另一方面,似乎只是需要以一种与应用程序功能无关的方式对代码库进行不必要的修改。
理想情况下,我想要一种将配置文件“锁定”在某个分支中的方法,这样每当我签出 master 时,我都会得到 master 配置文件,而每当我签出 staging 时,我都会得到 staging 配置文件。此外,将 staging 合并到 master 不应以任何方式影响 master 配置文件。迄今为止,我们已经通过在 git 根目录之外创建包含特定环境配置文件的文件夹并在部署时手动将适当的文件移动到代码库中来解决这个问题,但这当然是不必要的骇客(并且有潜在危险)。
有没有办法使用 git 来完成这个任务?
感谢您的考虑!
【问题讨论】:
标签: git deployment development-environment configuration-files web-deployment-project