维护“服务器版本”的正确方法是啥 - 在 Git 中只更改配置文件?

Posted

技术标签:

【中文标题】维护“服务器版本”的正确方法是啥 - 在 Git 中只更改配置文件?【英文标题】:What is the right way to maintain a "version for the server" - with only config files changed, in Git?维护“服务器版本”的正确方法是什么 - 在 Git 中只更改配置文件? 【发布时间】:2012-05-21 05:32:14 【问题描述】:

我有时会使用 Codeigniter,在本地站点上完成开发后,我需要将文件迁移到服务器。 /config/ 文件夹中的所有文件都需要更改以匹配服务器设置。对这些更改进行完整提交是不对的,我是让 Git 完全忽略这些文件,还是有办法跟踪这些更改并在适当的时候使用 Git 应用它们?

【问题讨论】:

你也许可以写一个 git after_deploy 钩子来做到这一点? 【参考方案1】:

你可以保持版本化:

两个“值配置文件”,每个环境都有正确的值 一个模板配置文件,其中包含值占位符(例如,@@PORT_NUMBER@@) 一个能够生成实际配置文件的脚本,具体取决于当前环境 content filter driver 在结帐时将触发脚本以生成正确的配置文件。

注意:假设您的模板配置文件具有可识别的内容(过滤器没有文件的名称或路径)。 git内容过滤驱动的限制见“Git equivalent of subversion's $URL$ keyword expansion”)。

【讨论】:

【参考方案2】:

这取决于您的需求。在我的公司,我们使用其他方法。 我们已经创建了几个环境(其中星号是内部项目名称):

devel - 站点在域 **.local.com* 上运行 测试 - 站点在域 test.*.company.com 上运行 beta - beta.*.company.com 生产 - 每隔一个域。

根据域名我们自动切换配置。 配置文件基本上是这样的:

<?php
return array(
  '_env' => array(
    'devel' => array(
      // config for devel
    ),
    'production' => array(
      // config for production
    )
  )
);
?>

一些框架(AFAIR Zend)在虚拟主机配置(或 .htaccess)中设置环境名称。你应该看看:zend framework auto switch production staging test .. etc

您看过 CI 文档吗?有一个关于它的section。

【讨论】:

【参考方案3】:

config 文件夹中创建两个文件夹。一个叫development,另一个叫production。现在将 config.php、database.php 等复制到每个文件夹中。现在,当您在生产服务器上时,CodeIgniter 将首先检查 production 文件夹中的文件。如果不存在,则使用config 文件夹中的默认文件。如果您在开发环境中,CodeIgniter 将首先检查development 文件夹。

如果您想保持任何配置文件与生产和开发环境相同,请将其保存在config 文件夹中。

如果要设置环境,则在 .htaccess 文件中添加以下代码:

#This code for Development Environment
SetEnv CI_ENV development

#This code for Production Environment
SetEnv CI_ENV production

【讨论】:

以上是关于维护“服务器版本”的正确方法是啥 - 在 Git 中只更改配置文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyPi 通过 git clone 传递令牌的正确方法是啥?

错误 MariaDB 服务器版本的原因是啥,以便在附近使用正确的语法

将 Django/South/PostgreSQL 从按需要计算的汇总值迁移到数据库中维护的汇总值的正确方法是啥?

管理 Kubernetes 清单更改的正确方法是啥?

使用 Git Flow 的正确流程是啥?

git:合并两个分支:正确的步骤是啥?