如何列出修改过的文件?

问题描述 投票:0回答:3

每当提出 PR 时,我都会使用 来运行

.gitlab-ci.yml
中定义的脚本。

我想获取自上次提交以来修改的文件列表。

用例是在大型代码库中运行特定于文件的集成测试。

gitlab-ci
3个回答
21
投票

如果您不需要知道路径,但只需要在特定文件更改时运行特定作业,则使用

only
/
changes
.gitlab-ci.yml
配置,例如

docker build:
  script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
  only:
    changes:
      - Dockerfile
      - docker/scripts/*

或者,如果您需要获取修改后的脚本的路径,可以使用

CI_COMMIT_BEFORE_SHA
CI_COMMIT_SHA
环境变量
,例如

> git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA
src/countries/gb/homemcr.js
src/countries/gb/kinodigital.js

9
投票

一些人会发现有用的常见用例。提出合并请求时运行作业。具体来说,对所有发生更改的文件运行 lint。目标分支。

正如答案之一所建议的,我们可以通过

CI_MERGE_REQUEST_TARGET_BRANCH_NAME
变量(预定义变量列表)获取目标分支名称。我们可以使用
git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
来获取已更改的文件列表。然后通过
xargs
将它们传递给 linter。示例配置可能如下所示。

code_quality:
  only:
    - merge_requests
  script:
    - git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME | xargs <LINT_COMMAND_FOR_FILE>

0
投票

这个问题在 gitlab 论坛的这个帖子中讨论过。

我的合并请求管道的工作脚本行是

- git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- git --no-pager diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME | grep "**/*\.py$" | xargs black --check
© www.soinside.com 2019 - 2024. All rights reserved.