有没有办法指示git隐藏我的敏感信息。 E.g。
Line1: $dbname = 'xyz';
Line2: $dbpassword = 'password';
Line1: $dbname = 'xyz';
Line2: $dbpassword = 'xxxxxxxx';
因此git会自动使用'x'隐藏信息。
如果不是通过git,我应该怎么做?我尝试将所有凭据保存在一个地方,但是当您使用第三方库并且他们在整个地方保留凭据时,它变得很难。
旁注:我根本不能跟踪credentials.php
文件,因为它可能还包含一些需要版本控制的其他逻辑。
注意:我发现this post有类似的问题。但答案对我来说并不令人满意。是否有一种自动化的方式来完成“已接受的答案”中所说的内容?
答案 0 :(得分:2)
您可能正在寻找的是过滤器。您可以在.gitattributes
文件中设置这些文件,以便在将文件添加到临时区域时运行一个替换,并在结帐时进行另一次替换:
图片来自Git book的.gitattributes部分,其中详细介绍了如何创建此类过滤器。
答案 1 :(得分:2)
一个常见的解决方案是将一个文件credentials.example.php
添加到存储库中,该文件不包含任何真实凭据,只包含用于指定它们的通用格式,以向其他人展示如何创建真实 credentials.php
。因为该文件随后会被.gitignore
文件忽略,因此不会添加到存储库中。因此,您可以将实际凭据放在那里进行开发甚至部署。
缺点是您可能需要在文件更改时将格式更改同步到两个文件中。但是你应该尝试保持这样的凭证(或配置)文件真正简洁,所以它不应该经常改变。
另一个解决方案是拥有两个配置文件,例如credentials.default.php
和credentials.user.php
,其中前者被检入存储库,后者再次被忽略。然后程序尝试加载(按顺序),因此您可以覆盖用户文件中的内容,但不需要重新指定所有内容。因此,如果您有许多配置,哪些默认设置是理智的(它们应该),那么您可能只需要覆盖一些重要配置(如凭据),因此您只需在用户文件中指定这些配置。
答案 2 :(得分:0)
我最终使用poke's
答案的变体。 请将所有选票重定向到他的答案。
我使用env
变量来解决我的问题。 Laravel(我使用)使用phpdotenv framework来处理env变量。
在我的所有配置文件中,我编写了env('USERNAME')
,env('PASSWORD')
等变量,我还在项目的根目录中定义了一个.env
文件。
USERNAME=rash
PASSWORD=pass
... Other key-value pairs.
在运行时,在配置文件中,所有这些键都将被此文件中定义的值替换。
我还定义了一个.env.example
文件,我保存了我的样本数据。
USERNAME=PUT_USERNAME_HERE
PASSWORD=PUT_PASSWORD_HERE
...
然后我版本控制这个文件。任何使用我的项目的用户都会复制此文件,将所有值替换为自己的值,并将该文件重命名为.env
。然后项目顺利进行。
这解决了我的问题,因为:
.env
文件中。因此,我可以对我的conf文件进行版本控制。.env.example
文件,因此另一端的用户确切地知道需要在适当的字段中添加什么。