GitLab CI中GIT_STRATEGY=clone无法获取所有远程分支问题
GitLab CI流水线无法获取所有远程分支的问题
我配置了如下GitLab CI流水线:
image: mambaorg/micromamba stages: - test job-name: stage: test variables: GIT_STRATEGY: clone script: - ls -l .git - id - micromamba install -c conda-forge git - git config --global --add safe.directory $CI_PROJECT_DIR - git branch -r
执行后仅能看到origin/name_of_my_branch,无法查看origin/master等其他远程分支。根据官方文档,使用GIT_STRATEGY=clone应该能获取所有远程分支,请问问题出在哪?
执行后的输出内容:
$ ls -l .git total 52 -rw-rw-rw- 1 root root 240 Aug 28 13:27 FETCH_HEAD -rw-rw-rw- 1 root root 41 Aug 28 13:27 HEAD -rw-rw-rw- 1 root root 358 Aug 28 13:27 config -rw-rw-rw- 1 root root 17572 Aug 28 13:27 index drwxrwxrwx 3 root root 4096 Aug 28 13:27 lfs drwxrwxrwx 3 root root 4096 Aug 28 13:27 logs drwxrwxrwx 4 root root 4096 Aug 28 13:27 objects drwxrwxrwx 6 root root 4096 Aug 28 13:27 refs -rw-rw-rw- 1 root root 492 Aug 28 13:27 shallow $ id uid=57439(mambauser) gid=57439(mambauser) groups=57439(mambauser) $ git branch -r origin/test_CI
问题原因分析
从输出里的.git/shallow文件可以看出,GitLab CI实际执行的是浅克隆(shallow clone),而非完整克隆。即便设置了GIT_STRATEGY=clone,GitLab CI默认会对仓库做优化:只克隆当前分支的最新提交,不会拉取所有远程分支的引用和完整历史。
默认情况下,GitLab CI的克隆行为受两个关键变量影响:
GIT_DEPTH:默认值为50,仅拉取最近50次提交,属于浅克隆范畴GIT_FETCH_EXTRA_FLAGS:默认无额外参数,不会主动拉取所有远程分支
解决方法
要获取所有远程分支,需要在CI变量中添加以下配置:
- 设置
GIT_DEPTH: 0关闭浅克隆,拉取完整仓库历史 - 添加
GIT_FETCH_EXTRA_FLAGS: --all,让Git拉取所有远程分支的引用
修改后的CI配置如下:
image: mambaorg/micromamba stages: - test job-name: stage: test variables: GIT_STRATEGY: clone GIT_DEPTH: 0 GIT_FETCH_EXTRA_FLAGS: --all script: - ls -l .git - id - micromamba install -c conda-forge git - git config --global --add safe.directory $CI_PROJECT_DIR - git branch -r
修改后执行流水线,git branch -r就能显示包括origin/master在内的所有远程分支了。
内容的提问来源于stack exchange,提问作者Michele Peresano
相关产品推荐
相关产品推荐

