首页 > 解决方案 > 如何 php lint 仅在 gitlab 中存在和修改文件?

问题描述

我的 gitlab-ci.yml 中有以下命令,它在每个更改提交的 php 文件上运行“php -l”:

test:
  stage: test
  script:
    - for file in $(git diff --name-only HEAD HEAD~1 | egrep "\.php$"); do php -l $file; done

我遇到的问题是,如果删除了 php 文件,它也会尝试对其进行 lint,但由于文件不存在而失败。

我怎样才能让它只检查存在的已更改的 PHP 文件?

标签: phpgitgitlab

解决方案


您可以使用git diff --name-status选项。该命令返回如下:

A       a.php # added file
D       b.php # deleted file
M       c.php # modified file

请查看更多详细信息。
https://git-scm.com/docs/git-diff#git-diff---name-status

以下命令使用此选项并检查除已删除文件之外的语法:

test:
  stage: test
  script:
    - for file in $(git diff --name-status HEAD~1 HEAD | egrep "^[ACMR].*\.php$" | cut -c 3-); do php -l $file; done

git diff --name-status HEAD HEAD~1返回反转的文件状态,所以我做了git diff --name-status HEAD~1 HEAD.


推荐阅读