为什么开发人员提交.dist文件而不是实际文件?

时间:2017-09-09 21:21:06

标签: git symfony version-control

为什么开发人员会提交.dist文件而不是实际文件?

例如: https://github.com/FriendsOfPHP/PHP-CS-Fixer

.php_cs.dist
phpunit.xml.dist

https://github.com/symfony/symfony

.php_cs.dist
phpunit.xml.dist

为什么.php_csphpunit.xml作为.dist文件提交?

代码格式规则在.php_cs.dist中,如果每个贡献者都应遵循相同的规则,为什么会.dist提交文件?

更新

parameter.yml.dist背后的推理是显而易见的,但为什么特别是.php_cs没有提交?为什么有人会更改包含代码格式规则的.php_cs.php_cs并不是每个贡献者都使用相同的规则来格式化他们的代码?

请回复对这两个文件的问候。

4 个答案:

答案 0 :(得分:3)

您可以将.dist个文件视为模板文件。根据您的具体分布,配置可能略有不同。使用dist文件,您只需将它们复制到例如phpunit.xml并调整它以满足您的需求。 (例如设置一些特定的ENV变量等)。

  

小方注释:Symfony项目中另一个常见的dist文件是app/config/parameters.yml.dist

答案 1 :(得分:0)

因为这样做会使您的本地(通常是" dev")和远程配置产生差异。这也允许您保护您的私人数据,而不会忘记设置所需的参数。

例如,symfony有一个" parameters.yml"文件和" parameters.yml.dist"文件。您的参数包含实际数据,用于实际环境,如果您尊重良好实践,则永远不会提交,因为您将推送包含数据库名称,用户名,邮件主机和所有类型的绝对敏感数据的文件(使用的秘密令牌)在表格中也是如此。

所以,你有一个dist文件,包含相同的键,但没有值:

示例: parameters.yml:

# This file is auto-generated during the composer install
parameters:
    database_host: mysql
    database_port: null
    database_name: portfolio
    database_user: artandor
    database_password: supersecretpassword
    mailer_transport: smtp
    mailer_host: smtp.gmail.com
    mailer_user: artandor
    mailer_password: supersecretaswell
    secret: 070950937b085d66fb1c59978ab9c47d4a420e32

你的dist文件看起来像:

# This file is a "template" of what your parameters.yml file should look like
# Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production.
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
parameters:
    database_host: 127.0.0.1
    database_port: ~
    database_name: symfony
    database_user: root
    database_password: ~
    # You should uncomment this if you want to use pdo_sqlite
    #database_path: '%kernel.project_dir%/var/data/data.sqlite'

    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: ~
    mailer_password: ~

    # A secret key that's used to generate certain security-related tokens
    secret: ThisTokenIsNotSoSecretChangeIt

很抱歉很长的帖子,想为你说清楚:))

通常的过程是推送dist文件,然后一旦你把它拉到服务器上,就可以了 cp parameters.yml.dist parameters.yml

除了保护数据之外的其他原因是在本地应用程序和已部署的应用程序之间进行不同的配置。

再见:)

答案 2 :(得分:0)

这与php_cs.dist的原因相同,您可以通过本地php_cs来自定义需要分析的规则,文件和目录,而不是使用命令行选项来自定义规则等等:例如--dry-run选项显示需要修复但未实际修改的文件:

$ php php-cs-fixer.phar fix /path/to/code --dry-run 

可用选项here,可以在.php_cs本地文件中设置。

答案 3 :(得分:0)

我在这里找到了答案:https://github.com/symfony/recipes/issues/41

  

不同之处在于PHPUnit将加载phpunit.xml.dist文件   phpunit.xml不存在。除非你这样做,否则你不需要复制它   想做特别的事。所以在repo中提交phpunit.xml.dist   (并在gitignore中添加phpunit.xml)就是关注   PHPUnit最佳实践

这些特定文件的.dist文件背后的原因是phpunit和php-cs-fixer在没有本地文件的情况下使用.dist文件。