使用Git为每个分支和合并管理具有不同内容的文件

使用Git为每个分支和合并管理具有不同内容的文件,git,Git,我有一个app.yaml和php.ini文件,它有一组不同的用于登台和生产的配置 我想创建3个独立的分支。1) 本地,2)分期,3)生产 问题是,如果我为每个环境分支并创建不同的文件,则在执行合并时,一个设置将被另一个设置覆盖。例如,当我将暂存分支合并到生产中时,配置文件现在将包含暂存设置,并且在生产环境中不起作用 如何在通过git跟踪各个分支中每个文件的更改的同时解决这个问题。我不想将配置文件添加到.gitignore。这并不是git的实际用法。我建议您以如下方式编写文件: IF 'Local

我有一个app.yaml和php.ini文件,它有一组不同的用于登台和生产的配置

我想创建3个独立的分支。1) 本地,2)分期,3)生产

问题是,如果我为每个环境分支并创建不同的文件,则在执行合并时,一个设置将被另一个设置覆盖。例如,当我将暂存分支合并到生产中时,配置文件现在将包含暂存设置,并且在生产环境中不起作用


如何在通过git跟踪各个分支中每个文件的更改的同时解决这个问题。我不想将配置文件添加到.gitignore。

这并不是git的实际用法。我建议您以如下方式编写文件:

IF 'Local' Then
  ...
ELSE IF 'Staging' Then
  ...
ELSE IF 'Production' Then
  ...
ELSE
  ...
END IF

我建议将设置作为环境变量,而不是为每个分支单独设置一个文件。

我避免将密钥和其他生产设置发布到git。每个环境都可以有各自不同的设置

我不能使用这些特定的配置文件。您可以编写一个构建脚本吗?我使用的是Google App Engine。我不熟悉构建脚本,不知道如何使用它们……它们不是密钥,只是应用程序ID和Google Bucket的名称。每个环境都有自己的bucket,在通过GAE PHP SDK更新应用程序时,我需要应用程序ID。尽管如此,将这些作为env变量保存可以让其他团队成员轻松更改设置,而无需提交任何内容,并且您的服务器将拥有正确的信息,因为它是服务器端设置。如果没有设置env变量(通常是dev设置,因为生产应该更易于管理),我的配置中通常会有良好的默认值,我已经设法在启动时将应用程序id作为参数传递,而不是在app.yaml文件上回复,因此我可以将该设置保留为默认的staging。现在唯一的问题是php.ini文件。这对于分支来说并不是一个很好的用途;登台并不是与生产分开的开发路径,只是代码还没有进入生产。通常,您为应用程序的每个版本(例如1.0、1.1)创建一个分支,并使用它修复测试中发现的错误。这样,只有修复程序才能合并回来。