将站点导入SVN存储库时,如何处理网站配置文件?

时间:2010-01-18 10:00:29

标签: php svn version-control

我开始在所有网站上使用SVN存储库,并想知道网站配置文件的最佳做法。

它们应该存储在存储库中吗?问题是,对于工作副本而言,网站的配置需要与实际网站的配置不同。如果我编辑工作副本的配置文件,以便在我提交回存储库时可以在我的机器上进行测试,配置文件也会在那里更新,然后可能会上传到实际站点。

人们通常对配置文件做什么,有没有办法告诉SVN在执行提交时跳过配置文件?

5 个答案:

答案 0 :(得分:2)

通常,如果配置文件存储重要信息,最好将其置于版本控制中。

如果您在这里谈论 ASP.NET 网站,我肯定会将配置文件放在SVN中。您可以使用inheritInChildApplicationsallowOverride(参见How to: Lock ASP.NET Configuration Settings)在ASP.NET配置文件中玩一些技巧,这可能允许您强制本地调试版本使用最终生产中的不同设置尽管使用相同的配置文件版本:只需将网站作为子目录安装在本地调试IIS中,并锁定您希望覆盖的几个部分。当然,你可以只包括两个配置键,用于特别棘手的位,并检查要加载的代码。

一般情况下,从SVN部署任何是一个很好的做法,这个过程涉及尽可能少的手动步骤。这使得你更有可能在时间压力下正确地做到这一点,并且它使灾难恢复更容易启动(例如,当您的数据中心出现泄漏并且您想要在某个临时盒子上安装网站,直到您有那些备份排序)。理想情况下,使用最多编译的svn签出或导出应足以使网站启动并运行。我直接在svn中包含了二进制dll依赖项(像javascript压缩器和诸如此类的东西),所以它运行时不需要在服务器上安装一堆自定义库,并在只有msbuild的dev机器上编译。

对于PHP ,原则是一样的。但是,你需要不同的技巧。例如,您可以编写配置文件,以便检查某些全局系统环境变量,然后覆盖所选设置(如果它是开发机器)。例如,我有一个与此类似的设置,我检查IP地址;所有开发机器都在特定的IP块中;除非机器在该IP块中,否则它被视为生产机器(不启用各种跟踪等选项)。您还可以检查主机名,或者只是所有开发人员同意在其开发计算机上设置的任何旧环境变量。

答案 1 :(得分:1)

如果dev / live环境之间的变量仅限于连接字符串和appsettings,那么您可以将web.config拆分为单独的文件,并为每个环境加载不同的文件。这样,您可以将所有内容都检入SVN,并根据您部署到的环境更新webconfig中的文件名引用。

http://kartones.net/blogs/kartones/archive/2009/09/29/asp-net-split-appsettings-and-connectionstrings-to-separate-files.aspx

编辑:刚看到你在谈论PHP。

答案 2 :(得分:1)

通常,最佳做法是将所有自定义配置文件存储在版本控制下。您可能希望为生产和开发版本保留单独的配置文件。

如果可能,尝试将依赖于部署环境(连接字符串,路径等)的所有配置节提取到单独的文件中。然后从主(公共)配置文件链接到它们,这样只需在将环境从开发环境更改为生产环境时更新引用即可。

答案 3 :(得分:1)

我认为最好将配置文件保存在SVN中。关于登台/生产环境的设置,我们所做的是为每个环境分配配置文件,然后将它们作为构建过程的一部分进行交换(使用Ant和MSBuild)。即我们可以触发“生成构建”,它将复制生产web.config文件。

答案 4 :(得分:1)

我绝对会在版本控制中使用该文件,因为它通常对网站的功能至关重要。要阻止它加载到实时,您可以查看构建脚本(例如Web Deployment Project),它将使用“实时”版本切换配置的开发版本。


抱歉,忽略该链接,只是看到你对这是一个PHP网站的评论 - 原则是相同的。