想问一下,我做了一个简单的php脚本,当新的代码集被推送到工作良好的存储库时,从bitbucket自动部署。但有时会对composer.json
文件进行更改。所以我现在所做的是每次PHP脚本被触发时调用exec('composer update')
,这可能是耗时的,即使没有对composer.json
文件进行任何更改。
是否有任何方法,我可以调用PHP检查composer.json
文件是否已更改,然后只执行exec('composer update')
?
是否有任何方法,我可以调用PHP来检查是否作曲家。Json文件已更改,然后只执行exec('composer update') ?
我建议使用"git diff"命令对repo中的一个文件进行历史检查,或者比较/检查文件的修改日期。
例子:
-
git --no-pager diff --name-only HEAD~50 -- ./composer.json
- 检查是否编写器。json在最近50次提交中被修改(HEAD)
-
git --no-pager diff --name-only origin/master~15 -- ./composer.json
- 检查是否编写器。json在最近15次提交(主分支)中被修改
如果返回文件名,则表示该文件在提交范围内被修改。
您可能需要更改提交的数量,diff回到历史中查找更改,但这里有一个粗略的草稿让您开始:
<?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
文件推送到repo并从运行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.