与大多数人写{和阅读'关于whether to keep composer.lock
in version-control的问题一样,我们一直在那里。
然而,每次在不同的代码分支中独立更新文件时,这都会给我们带来麻烦。即使更改不相关并且会相互影响文件的各个部分,"content-hash"
行每次都会导致冲突 。更糟糕的是,“侧面”都不正确,无论谁进行合并,都必须手动重新生成文件......
也许,这条线不是真的有必要吗?在询问之前,是否(当前版本的)作曲家在没有它的情况下工作,会缺少什么功能?哈希似乎可以防止文件本身发生变化 - 但源控制系统已经在做了......
我可以简单地删除该行吗?如果今天无法完成,那么它是作曲家的理想功能吗?
答案 0 :(得分:24)
正如您在Composer\Package\Locker::getContentHash()
中所看到的,内容哈希考虑了composer.json
的以下字段:
$relevantKeys = array(
'name',
'version',
'require',
'require-dev',
'conflict',
'replace',
'provide',
'minimum-stability',
'prefer-stable',
'repositories',
'extra',
);
内容哈希更改的唯一原因是更改了composer.json
中相应属性的值之一。
Composer使用内容哈希来确定composer.json
中的相关字段是否与composer.lock
同步。你可以运行
$ composer validate
了解它们是否同步。
如果composer.json
和composer.lock
未同步,则会显示与此类似的消息
锁定文件与composer.json中的最新更改不是最新的,建议您运行
composer update
。
供参考,请参阅https://getcomposer.org/doc/03-cli.md#validate:
在提交
composer.json
文件之前以及标记版本之前,应始终运行validate命令。它会检查您的composer.json
是否有效。
composer.lock
如果您在解决composer.lock
中的冲突时遇到问题,可能会有所帮助:
通常,您可能会尝试在上游更改之上重新绑定分支。如果已经发生冲突,请使用IDE,或运行
$ git checkout --theirs composer.lock
接受composer.lock
的上游更改。由于这是一个生成的文件,因此您真的不想解决其中的冲突。
composer.json
和composer.lock
如前所述,composer.json
中有一系列相关的关键字。其中一些可以通过相应的命令修改,其他则不能。
例如,如果其中一个更改是新添加或删除的包,请运行
$ composer require foo/bar:^1.2.3
或
$ composer remove foo/bar
应用更改。
如果通过运行命令无法应用更改,请手动修改composer.json
,然后运行
$ composer update --lock
这将更新内容哈希。
供参考,请参阅https://getcomposer.org/doc/03-cli.md#update:
- lock :仅更新锁定文件哈希以禁止警告锁定文件过期。