9

我们使用git大多数我们建立在我们的商店的web应用程序,尽管应用程序本身使用多种技术(PHP,Rails的,等等),我们通常有一个分期和生产每个站点的服务器。通常,这些服务器具有不同的数据库凭据集以及不同的基于环境的配置设置(例如缓存)。我们的工作流程通常涉及每个项目维护两个git分支:反映生产服务器的master和反映分段的分段。新功能在分段(或子分支)上开发,并在完成和部署后合并回主。混帐:应用程序配置和不同的环境

我的问题是关于维护是科顺和特定环境的配置文件的最好方法。我已经看到类似问题herehere的答案,但都没有真正满足。主要的两种方法似乎是a)使用.gitignore排除将配置文件留在git的权限范围之外,或者b)编写反射的,环境感知的代码,其确定例如根据主机名使用哪些数据库凭证。我对a)的问题是它只允许一组配置文件存在于代码库中(不管当前分支),所以其他环境的配置文件会丢失。另一方面,b)似乎需要对代码库进行不必要的修改,这种方式与应用程序的功能无关。理想情况下,我想要一种方式来锁定某个分支内的配置文件,这样无论何时我签出master,我都会得到master配置文件,并且每当我结帐时,就会得到配置文件。另外,将分段合并到主设备中不应以任何方式影响主配置文件。迄今为止,我们已经通过在git根目录之外包含特定于环境的配置文件的文件夹进行处理,并在部署时手动将相应的文件移动到代码库中,但这当然是不必要的破解(并且可能是危险的)。

有什么办法可以用git来完成这个任务吗?

感谢您的考虑!

+0

将http://stackoverflow.com/questions/2154948/how-can-i-track-system-specific-config-files-in-a-repo-project/2155355#2155355结合http:// stackoverflow .com/questions/3207575/how-do-i-open-source-my-rails-apps-without-giving-away-the-apps-secret-keys-and/3207608#3207608 help here? – VonC 2010-07-09 15:33:48

回答

12

不知道为什么人们认为他们可以逃脱没有某种形式的安装工具。 Git关于跟踪源代码,而不是关于部署。你应该还有一个“make install”类型的工具,可以从你的git仓库到实际的部署,这个工具可以做很多事情,比如模板扩展或者替代文件的选择。例如,您可能已将“config.staging”和“config.production”签入git,并且当您部署到分段时,安装工具会选择“config.staging”以复制到“config”。或者你可能有一个单独的“config.template”文件,它将被模板化以在部署中进行“配置”。

+0

是的,这通常是我如何做事。我使用了一个部署工具(我主要与Django一起工作,所以我使用Fabric或Capistrano,在我正在使用Rails应用程序的罕见实例中)在部署时自动移动或设置符号链接到适当的配置文件。 – mipadi 2010-07-09 16:24:19

0

我认为通常情况下,只有master认为已经在staging提交。如果您向master添加了一个额外的提交,其中包含两个分支之间的配置差异,那么在staging之后重新提交此提交应保持该配置。这并不像“合并到主服务器不应该以任何方式影响主配置文件”那样简单,但是由于在这些情况下你会遇到合并冲突,它可能已经足够接近了。

3

你可以尝试使用合并后或结账后挂钩,以确认一切都是理所应当的,否则解决它。这实际上是seems to be suggested by the ProGit book

的概念基本上是写那些钩子充当微型“使安装”的脚本,确保分公司的正确配置,由主机,在存在或其他文件,通过任何你喜欢的内容。钩子甚至可以重写你的配置文件或者通过填充模板来重新创建它们。

相关问题