在Git中切换生产和开发配置的最佳方法

3
我们使用Git,通常的工作流程是开发 > 预发布 > 生产。
该项目有几个配置文件。在开发过程中,配置指向开发数据库。然而,在开发完成并准备部署后,配置需要更改并指向生产数据库。
在下一轮更改期间,我需要再次更改配置以指向开发数据库。
这个循环不断重复,因为我有3个配置文件(最好只能做到2个,因为一个配置文件是为了特定的库)。
有更好的方法吗?

如果你非常必须将配置文件保存在代码仓库中,你考虑过使用分支吗?从开发分支创建生产分支,修改配置文件以匹配生产环境,然后就可以开始工作了。接着,在不同的时刻将开发分支合并到生产分支,这样就能保留你修改过的配置文件,至少直到出现合并冲突为止。 - Lasse V. Karlsen
通常的建议是只将模板存储在代码库中,并使用构建步骤或类似方法检测磁盘上是否缺少真实的配置文件,然后从模板中复制一份。然后您可以在磁盘上编辑配置文件。然而,这种方法无法自动检出生产就绪的配置文件。 - Lasse V. Karlsen
非常感谢@LasseV.Karlsen 我已将配置文件添加到.gitignore中,但它们仍未被“忽略”,还没有弄清楚原因。尝试取消跟踪后,我的配置文件消失了!我创建了一个生产分支,每次将开发分支合并到其中,目前正常运行。我非常有兴趣在构建步骤中使用模板来创建配置。我的构建工作还太基础,需要进行改进。 - Samuel Waithaka
是的,由于您已经将配置文件添加到存储库中,所以您会遇到问题。无法告诉git“请停止跟踪这些文件,但在检出时保留它们在磁盘上”。您必须通过确保在检出新提交后仍然在磁盘上拥有配置文件来处理从“糟糕的配置管理”到“正确的配置管理”的过渡。复制配置文件并在之后恢复它们。 - Lasse V. Karlsen
1个回答

0

我假设你的配置文件包含数据库信息,如主机、用户名、密码...

我认为一个好的方法是将数据库信息存储为环境变量,并将它们引入你的配置文件中。

例如,在开发、暂存和生产环境中,数据库主机将存储在名为DATABASE_HOST的环境变量中。在配置文件中,你会有这一行(php代码)

 $databaseHost = getenv('DATABASE_HOST');
 // ...

正如 @Lasse V. Karlsen 所说,模板应该由 git 跟踪,而配置文件本身应该被 git 忽略。 这样一来,开发人员就不需要创建环境变量,所需做的就是根据模板创建配置文件(当然要忽略 git),并设置他们的数据库信息(以及可能依赖于服务器、环境等的其他信息)。

所以总的来说,配置文件应该被 git 忽略,而应该创建一个模板。在部署时,从模板创建配置文件。 新的配置文件获得所需的环境变量。 然而,开发人员可以在本地创建这些环境变量,或者修改他们的配置文件的值。


谢谢@smarber,我明白了概念,但不确定它是否适用于.properties类型的文件。可能是个愚蠢的问题,但环境变量究竟存储在哪里? - Samuel Waithaka
你是指系统中设置的环境变量吗? - Samuel Waithaka
@SamuelWaithaka 是的,我指的是你应该设置环境变量,以某种方式从配置文件中获取(我认为所有编程语言都允许这样做)。 - smarber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接