我想问一下,我制作了一个简单的 php 脚本,当新的代码集被推送到存储库时,它可以从 bitbucket 自动部署,工作正常。但有时会对
composer.json
文件进行更改。所以我现在所做的就是每次触发 PHP 脚本时调用 exec('composer update')
,即使没有对 composer.json
文件进行任何更改,这也可能很耗时。
有什么方法可以调用PHP来检查
composer.json
文件是否已更改然后只执行exec('composer update')
?
有什么方法可以调用PHP来检查composer.json文件是否已更改然后只执行exec('composer update')?
我建议使用“git diff”仅对存储库中的一个文件进行历史记录检查,或比较/检查文件的修改日期。
示例:
git --no-pager diff --name-only HEAD~50 -- ./composer.json
git --no-pager diff --name-only origin/master~15 -- ./composer.json
如果返回文件名,则文件在提交范围内被更改。
您可能需要更改差异在历史记录中返回的提交数量以寻找更改,但这里有一个粗略的草案可以帮助您开始:
<?php
function fileChanged() {
$cmd = 'git --no-pager diff --name-only HEAD~50 -- ./composer.json';
exec($cmd, $output);
return ($output[0] === 'composer.json') ? true : false;
}
if(fileChanged()) {
exec('composer update');
} else {
echo 'Found no change to "composer.json" with 50 commits. Skipping "composer update"';
}
此外,对于自动部署,将
composer.lock
文件推送到存储库并从运行 composer update
切换到 composer install
可能会有所帮助,因为 Composer 不需要进行依赖项解析和版本查找,从而提高了部署速度。
跑步
composer install
将会:
composer.lock
composer update
创建它composer.lock
存在,从锁定文件安装指定版本跑步
composer update
将会:
composer.json
composer.lock
以反映安装的最新版本旁注:我记得 Github 跟踪器上有一个类似或非常接近的功能请求 (
--install-only-if-changed
):https://github.com/composer/composer/issues/3888.
我已经在 https://stackoverflow.com/a/77334505/22777518 中回答,仅当使用
composer install
+ composer.json
+ composer.lock
更改 sha1sum
或 git
时才运行 bash
脚本。
如果您愿意,您可以参考该答案并使用
composer update