想问一下,我将一个简单的php脚本从bitbucket自动部署,当新的代码集被推送到存储库时工作正常。但有时会对composer.json
文件进行更改。所以我现在所做的是每次激活PHP脚本时都调用exec('composer update')
,这可能很耗时,即使composer.json
文件没有更改。
有什么方法可以调用PHP来检查composer.json
文件是否已被更改然后只执行exec('composer update')
?
答案 0 :(得分:3)
有什么方法可以调用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
文件推送到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。