我使用GitHub进行多服务器部署,一个是生产服务器,一个是开发服务器。有一些配置文件(我们称之为config.php)需要特定于服务器。但是,出于备份目的,我们需要在GitHub服务器上保留生产的配置文件。但是,在开发服务器上,我们需要继续将它从git push / pull进程中删除,以便它永远不会上传到服务器,或者在git pull命令上覆盖。我怎样才能做到这一点?将它添加到.gitignore会处理这个过程,还是会将其复制到生产服务器上。
对于引用,配置文件与.git相关的位置是/exampledirectory/config.php
答案 0 :(得分:1)
只有在您确定生产服务器上的.gitignore
文件将在需要时手动更改/覆盖时,才能将其添加到config.php
。
使用.gitignore
绝对不会在发布代码时推送它。
答案 1 :(得分:1)
你的问题的答案:你做不到。
如果配置文件已被git跟踪,则不能仅在本地忽略它(这就是克隆存储库为clone
的原因:它实际上是完全相同的内容)
有3个选项:
您可以从git(git rm exampledirectory/config.php --cached && git commit && git push
)中删除该文件,但您必须连接到远程服务器并恢复该文件(只有一次)。现在,如果要更改生产配置,则必须远程登录。
或者,您可以将文件重命名为config-default.php,并最终添加一个更新后的挂钩(和/或其他,本地或远程根据您的需要)将该文件复制到config.php如果检测到更改。
*另一种选择(我使用类似的解决方案)需要一些开发来根据您当前的环境(生产,开发或其他)更改配置文件的方式:例如,如果您添加了本地虚拟主机setEnv CUSTOM_ENV develop
,您可以使用以下代码:
if (isset($_SERVER['CUSTOM_ENV']))
{
$config = __DIR__.'/exampledirectory/'.$_SERVER['CUSTOM_ENV'].'/config.php';
if (!file_exists($config))
$config = false;
}
if (!$path)
{
$config = __DIR__.'/exampledirectory/config.php';
}
require_once($config);
您还可以将环境定义基于磁盘中某个位置的文件(名为.debug.inc
的空文件,您的ip(127.0.0.1当localhost),您将设置的cookie的值或您想要的任何内容
在该示例中,路径exampledirectory/develop
可能位于.gitignore中,因此所有开发人员都可以自定义自己的配置而不会出现任何问题。您可以稍后添加更多环境(preprod,test,...),并根据您要测试的内容进行不同的配置。
此外,如果以后您有超过2个服务器部署,您可以使用一种分层样式(略微)更复杂的配置系统:
首先,加载默认(通用)配置somedir/config.php
其次,检查当前env(somedir/[ENV]/config.php
)是否存在其他配置文件,并且是否存在包含它。
因此,如果您的配置文件只返回一个params数组,这不是问题,但是如果您的配置文件包含常量,那么您可能会遇到一些问题(无论如何这都是不好的做法:))。