使用git管理不同配置的处理方式

3
我正在进行一个Laravel 4项目,在mail.pjp上有一个选项,你可以假装发送邮件,但实际上将其记录在本地文件中。这对开发很有用。
我的问题是关于版本控制。如果我将此选项作为“true”提交,那么当我更新生产服务器时,它可能会禁用电子邮件,如果我不小心的话。
另一方面,如果我将文件在git中标记为“true”,它可能会发生今天发生的事情,我失去了好几个小时来理解为什么邮件不起作用,因为我忘记了为我的开发环境更改此选项。
我该如何使用git处理这些“生产与开发”配置问题?

2个问题: 您的配置文件是否会随时间而变化?您的部署过程是什么? - Benjamin Toueg
好的,如果我的配置文件在未来会发生变化,这是我目前无法预见的事情。我的部署过程非常基本。我只需要在服务器上执行 git pull origin master - Enrique Moreno Tent
可能是重复的问题,关于如何使用Git管理一个代码库但拥有不同的环境,请参考How to use git to manage one codebase but have different environments - user456814
显示剩余2条评论
2个回答

2

为每个配置项创建一个分支。

例如,您可以有一个production分支和一个dev分支。

production分支上,只需提交一个更改配置文件的提交,然后像使用master分支一样使用dev分支。

部署过程变为:

在dev上:

  • git checkout production
  • git merge dev
  • git push origin production

在production上:

  • git pull origin production

或者拆分您的配置文件

并且可能添加一些运行时测试来在正确的时间选择正确的配置文件。


为了确保,你写的那三个命令,我应该在开发机器上输入还是在生产服务器上输入? - Enrique Moreno Tent
非常好用,谢谢 :) - Enrique Moreno Tent

1
我有一个类似的问题,并使用以下解决方案,它可能有点繁琐,但可以很好地将“私有”数据与公共项目分离。
思路是不要将配置文件放在正常的git存储库中,而是放在私有存储库中。理想情况下,您希望私有存储库是公共存储库的子模块,但必须以另一种方式进行(以隐藏私有存储库)。
为此,我创建了一个名为private的存储库,其中包含我的配置文件。然后我创建了一个包含public的子模块,并添加了指向配置文件的链接。
目录结构如下:
private + (private git repo)
        |
        +- config.conf
        |
        +- public + (public git repo)
                  |
                  + config -> ../config.conf
                  |
                  + src 

然后我在私有仓库上有一个devel和一个production分支,其中包含两个版本的配置文件。但我从未真正接触过这些目录。
当新的开发人员到达时,他只需fork devel分支,然后在public中工作,就像没有总项目一样。正常地进行pull push操作。
当需要部署时,只需进入生产机器并更新public子模块。如果需要更新生产配置文件,只需在生产机器上更新并推送它。或者你可以在本地切换到production分支,进行必要的更改,然后将它们推送到生产服务器。
希望这很清楚。

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