首页 > 解决方案 > 为 git fetch 命令设置动态深度

问题描述

在我的 gitlab CI 中,默认情况下会获取最后 50 个提交。为了改变这一点,我可以使用额外的标志,额外的标志接受git fetch命令的所有选项。

例如,我可以将其更改为

variables:
    GIT_FETCH_EXTRA_FLAGS: --depth 100

这样就可以获取最后 100 个提交。

但我想获取自上次发布以来的所有提交(在我的情况下总是有一个标签)。在我的管道中,我已经在做类似的事情

- tag=$(git describe --tags --abbrev=0)
- base=$(git rev-parse $tag)

获取带有最后一个标签的提交,我在管道中处理它。

是否可以动态设置深度,或者是否有另一个选项可以使用最后一个标签?因为如果我设置了一个“硬编码”深度值并且在某个时间会有更多的提交,那么管道就会失败。

标签: gitgitlabgitlab-ci-runner

解决方案


您最好的选择是使用该变量GIT_STRATEGY: none告诉 Runner 在设置作业时根本不要克隆/获取存储库,而是在您的脚本部分运行您自己的 git 命令。

例如:

...
A Job:
  stage: a_stage
  image: alpine:latest # super small image to promote quick CI pipelines
  variables:
    - GIT_STRATEGY: none
  before_script:
    - apk add git # See notes below
  script:
    - git ... # whatever you need to do
    - ...

注意:最简单的方法是在 CI 作业中安装所需的包,但每次管道运行时都会发生这种情况。最好根据您正在使用的映像创建自定义映像,在那里安装您需要的包,然后在 CI 中使用该映像


推荐阅读