水银。版本控制和部署。不同的配置文件。如何?

时间:2012-01-02 22:42:20

标签: version-control mercurial tortoisehg bitbucket

我的设置如下。

bitbucket上的私有存储库,我保留了'master'存储库。 我的服务器上的存储库充当“实时”网站。 我的笔记本电脑上的存储库充当我的工作副本。

我的流程如下。我对本地存储库中的文件进行了更改。我在当地提交这些。我将这些更改推送到bitbucket。然后我将这些更改从我的bitbucket提取到网络服务器。

我遇到的问题是我的本地副本使用不同的数据库,路径等配置设置,我想要的是我在bitbucket上的'config.php'文件包含服务器设置,以及config.php on我的本地主机包含本地设置。

我相信这可以通过.hgignore实现,但我没有成功研究。 我遇到的问题是我制作我的服务器设置文件,将其推送到bitbucket,“忘记”我本地存储库中的文件,创建.hgignore,然后重新创建该文件。但是,当我'忘记'文件TortoiseHG通知并要求我将更改提交到bitbucket ....

任何想法都将不胜感激。 感谢

其他要点。

根据以下建议,我开发了如下设置:

我的笔记本电脑上有我的本地存储库,我可以在其中进行编辑。 我有bitbucket本质上是'主'存储库 - 如果任何其他开发人员加入团队他们克隆这个。 我的网络主机上有我的实时存储库。

在我的实时存储库中,我有一个.hgignore文件,它会忽略相应的配置文件。 因此,当我从主机执行hg pull时,它会使用localhost配置文件按原样提取存储库,但是当我键入hg update(到实时工作副本)时,这些文件将被忽略/不更新

有人可以澄清我是否理解这一点,以及这是否是实现我想要的合适方式?

由于

3 个答案:

答案 0 :(得分:5)

.hgignore只会忽略文件,如果它们尚未版本化,那么我认为问题中的想法不起作用。

关于本地配置的常见方法通常是同一主题的变体,如下所示:

  1. 根本不要检查config.php。您可以使用最常见的设置签入config.example.php,并在README中记录用户必须将其复制到config.php,然后进行修改。

  2. 将任何共享设置放在config.php中,并添加一个include语句以指向具有特定于该计算机的设置的无版本文件,例如config.local.php。您还可以为此提供config.local.example.php - 文件。

  3. 与2类似,但config.php包含所有默认设置,本地文件可以覆盖它们。

  4. 签入config.dev.phpconfig.server.php - 包含两种环境设置的文件,然后使用包含上述文件之一的无版config.php。优点是配置本身已经过版本化,您可以更新它们。

  5. 要选择哪些变体,或者您是否进行其他变体,取决于您的环境。

答案 1 :(得分:1)

使用版本控制和不同配置文件的基本思想总是一样的,但我不知道PHP能够详细解答如何在PHP中执行此操作。
我几个月前回答了a similar question .net / Visual Studio的问题,所以我只是给你这个答案的链接,并尝试再次描述基本的想法,但这次是与语言无关的:

对于您的用例,基本思路是在存储库中有两个配置文件,一个包含本地数据,另一个包含服务器数据,例如:

config.local.php
config.server.php

“真实”config.php不在存储库中,它应该在.hgignore中,因此它永远不会在存储库中

拉动之后,您需要运行将其中一个文件(“正确”的文件,取决于当前环境,本地或服务器)复制到config.php的内容。

正是这最后一部分是我无法详细回答的部分,因为我不知道如何在PHP和/或Web服务器上这样做,因为我是.net / Windows的家伙。
据我所知,部署PHP站点只是复制Web服务器上的文件,因此没有“构建/编译”步骤可以完成配置文件的复制/重命名(我将在其中执行此操作)。净)。如果我错了,请纠正我......


修改

托马斯,我不确定我是否理解你的编辑。您的笔记本电脑上的“本地”存储库和您的网络服务器上的“实时”存储库基​​本上是Bitbucket上“主”存储库的克隆,对吗? 如果是的话,你是说你在不同的克隆中有不同的.hgignore文件?这是让我困惑的部分 无论你最终如何实际操作(有几种处理配置文件的可能性,见下文),.hgignore文件在你的存储库的所有克隆中应该是相同的。

因此,所有存储库(无论哪台机器上的哪个克隆)都应包含相同的配置文件。
然后,您只需确保在不同的环境中使用不同的配置。已经有一个很好的列表,列出了Lauren Holst's answer中实现这一目标的不同方法,所以我只想指出你。
正如劳伦斯霍尔斯特已经说过的那样,我们无法分辨出哪种方式最适合你 - 这取决于你的环境。

答案 2 :(得分:0)

您可能需要查看here。如果提交配置文件和.hgignore,则.hgignore将不起作用。您还可以添加域检查条件:

$domain = $_SERVER['HTTP_HOST'];
if ($domain=="localhost") {
    //local copy config
}
else if ($domain=="yourdomain.com") {
    //webserver config
}