在Git分支中保留特定文件的不同内容

Rya*_*yan 8 git deployment version-control configuration

我有一个config.php假设在不同分支中的内容不同,例如testingmaster.

我在另一个问题(防止合并来自Git的master中的文件)中询问如何防止此文件合并.

但我想知道,这是正确的方法吗?

我相信这是一个非常常见的用例,在不同的环境中有不同的配置文件,你想要跟踪配置,对吧?

Von*_*onC 5

对于配置文件,一种解决方案是不对它进行版本控制(这样,就不会发生合并问题!)

您将使用内容过滤器驱动程序

内容过滤器驱动程序

您将版本:

  • 一个值文件(用于master环境)
  • 一个值文件(用于dev环境)
  • 一个模板文件(带有占位符变量,如@PORT_NUMBER@
  • 一个' smudge'脚本能够基于当前分支,并基于检出文件(此处为模板文件)的内容来生成实际的配置文件(仍为“私有”,即未版本化)。
  • 一个clean脚本可以检测私有配置文件中的任何值更改,并将这些更改后的值存储回(版本化)值文件中。


Sam*_*ane 4

执行此操作的经典方法是有一个名为config.yml-dist的默认配置文件(假设您的原始文件名为config.yml);您将原始文件添加到 .gitignore 中,并仅对dist文件进行版本控制。
部署应用程序或重新克隆项目后,只需cp config.yml-dist config.yml更改所需的设置即可。

我在 PHP行业遇到的很多人都使用这种方法。

但是,有一个我更喜欢并且发现更干净的方法:使用环境变量。例子:

username: <%= ENV['MONGOID_USERNAME'] %>
password: <%= ENV['MONGOID_PASSWORD'] %>
database: <%= ENV['MONGOID_DATABASE'] %>
Run Code Online (Sandbox Code Playgroud)

这样,您将拥有一个单一版本化的配置文件,而无需编辑任何一个配置文件。