如何以实用的方式控制配置文件的版本?

ere*_*non 31 svn version-control configuration-files

假设我们有一个包含敏感密码的配置文件.我想版本控制整个项目,包括配置文件,但我不想共享我的密码.
这可能是好的,如果这个配置文件:

database_password=secret
foo=bar
Run Code Online (Sandbox Code Playgroud)

database_password=*
foo=bar
Run Code Online (Sandbox Code Playgroud)

而且vcs的其他用户也可以自己设置密码.忽略文件不是一个好方法,开发人员应该知道,如果配置文件发生了变化.

例:

本地版本:

database_password=own_secret
foo=bar
Run Code Online (Sandbox Code Playgroud)

vcs中的配置文件:

database_password=*
foo=bar
Run Code Online (Sandbox Code Playgroud)

然后突然,配置文件发生了变化:

database_password=*
foo=bar
baz=foo
Run Code Online (Sandbox Code Playgroud)

每个开发人员都会使用本地版本:

database_password=own_secret
foo=bar
baz=foo
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案.我怎么能实现这种行为?你如何存储你的配置文件?有没有办法做到这一点,还是我应该破解什么?

Phi*_*ler 26

您可以将模板或默认文件放在版本控制中,而不是版本控制实际配置文件,以及要求数据库信息和凭据生成真实配置文件的脚本,该文件将被排除(即被忽略)版本控制.在结账时,开发人员可以运行此脚本以获得工作环境.也可以在应用程序使用的任何安装过程中调用此脚本.

请参阅我对类似问题的回答.


Pao*_*olo 9

不确定您的配置是如何实现的,但是具有分层覆盖是我如何处理它.

你有一个主配置,包含公共配置和虚拟用户名/密码(或完全保留这些).然后,每个开发人员使用其特定的用户名/密码创建本地override.config(或其他).主配置在源代码管理下,开发人员(或机器)本地覆盖不在.

我已经在.NET中完成了这个,但不是PHP,所以我不知道这有多容易,我害怕.


Rob*_*ves 5

创建一个包含用户特定信息作为 PHP 变量的本地覆盖文件。

例如,创建一个名为 local_overrides.php 的文件,其中包含以下内容:

$local_password = 'qUzaEAFK13uK2KHy';
Run Code Online (Sandbox Code Playgroud)

然后在包含您的数据库密码的文件中执行以下操作

$overrides = 'local_overrides.php';

if (file_exists($overrides)) {
   #include_once($overrides);
   $db_password = $local_password;
} else {
   // perform appropriate action: set default? echo error message? log error?    
   $db_password = 'l1m1t3d!'
}
Run Code Online (Sandbox Code Playgroud)

源代码管理永远不必看到本地覆盖文件。