Travis CI配置phpcs仅检查当前提交PHP文件的方案咨询
如何让Travis CI仅检查当前提交的PHP文件以符合PSR2规范?
我之前帮不少开发者搞定过这个需求——核心思路就是先精准获取本次提交改动的PHP文件列表,再把这个列表传给phpcs,而不是盲目扫描整个项目。下面给你两个实用的方案,你可以根据自己的场景选择:
方案一:基础版(仅适配Push提交)
如果你的场景只需要处理代码推送(Push)的情况,直接用Git命令获取本次提交的改动文件即可。在Travis配置里替换原来的脚本为:
- CHANGED_FILES=$(git diff --name-only HEAD^ HEAD | grep '\.php$') - if [ -n "$CHANGED_FILES" ]; then phpcs --standard=PSR2 $CHANGED_FILES; fi
脚本说明:
git diff --name-only HEAD^ HEAD:获取当前提交与上一次提交之间改动的文件名称列表grep '\.php$':从列表里过滤出所有PHP文件- 最后判断如果有符合条件的文件,才执行phpcs检查,避免没有PHP文件改动时报错
方案二:增强版(适配Push + Pull Request)
如果你的项目还需要处理Pull Request(PR)的场景,上面的基础版就不够用了——因为Travis处理PR时,HEAD^指向的不是目标分支的最新提交。这时候可以自动判断当前是Push还是PR,用不同的方式获取改动文件:
- if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then # 处理PR:对比目标分支和PR分支的差异 CHANGED_FILES=$(git diff --name-only $TRAVIS_BRANCH...$TRAVIS_PULL_REQUEST_BRANCH | grep '\.php$') else # 处理Push:对比当前提交和上一次提交的差异 CHANGED_FILES=$(git diff --name-only HEAD^ HEAD | grep '\.php$') fi - # 排除vendor等不需要检查的目录(可选,根据你的项目调整) - CHANGED_FILES=$(echo "$CHANGED_FILES" | grep -v 'vendor/') - if [ -n "$CHANGED_FILES" ]; then phpcs --standard=PSR2 $CHANGED_FILES; fi
额外提示:
- 如果你有不需要检查的目录(比如
vendor、tests里的某些文件),可以像上面那样用grep -v排除掉 - 确保Travis环境里的Git命令可用——默认情况下Travis会拉取你的代码仓库,所以Git是自带的,不用额外安装
- 如果是项目的第一次提交(没有
HEAD^),可以把HEAD^ HEAD改成HEAD~1 HEAD,或者添加判断避免报错
内容的提问来源于stack exchange,提问作者Naveen Giri
相关产品推荐
相关产品推荐

