Git 仅在 GitLab 中记录不明确的参数

标签 git gitlab gitlab-ci

我有两个分支,master 和turtles,其中turtles 领先于master 一项提交:“我喜欢turtles”。
在 GitLab 中,我有以下 .yml 文件,每当创建 merge 请求或通过推送分支进行 merge 来更新该请求时,该文件都会运行:

update-doc:
    stage: deploy
    script:
        - echo $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
        - 'echo $(git log --abbrev-commit remotes/origin/master)'
        - 'echo $(git log --abbrev-commit remotes/origin/master..remotes/origin/${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME})'
        - 'echo $(git cherry -v remotes/origin/master remotes/origin/turtles --abbrev=1)'
    only:
        - merge_requests

运行git log --abbrev-commit remotes/origin/master..remotes/origin/turtlesgitcherry -v remotes/origin/master remotes/origin/turtles code> 在我的 Windows 机器上的 Git Bash 和我们托管 GitLab 的 Linux VM 上,返回提交消息“我喜欢海龟”,正如预期的那样。但是当 .yml 文件运行时,它找不到分支 remotes/origin/turtles 并且我得到以下输出:

$ echo $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
turtles
$ echo $(git log --abbrev-commit remotes/origin/master)
8406e4d Update .gitlab-ci.yml
$ echo $(git log --abbrev-commit remotes/origin/master..remotes/origin/${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME})
fatal: ambiguous argument 'remotes/origin/master..remotes/origin/turtles': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git [...] -- [...]'
$ echo $(git cherry -v remotes/origin/master remotes/origin/turtles --abbrev=1)
fatal: Unknown commit remotes/origin/turtles

因此,GitLab 清楚地知道存在turtles 分支,因为它位于 $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 变量中,但似乎无法解析remotes/origin/turtles。我也尝试过不使用 Remote /原点/部分,但仍然没有运气。

如何让 GitLab 运行程序识别 merge 请求分支的远程路径?或者我可以尝试另一个 git 命令来仅显示海龟分支上的提交?

最佳答案

在 GitLab CI/CD 中, checkout 代码的默认策略是通过浅 merge 获取当前分支,例如git fetch --深度 50 来源 $CI_COMMIT_BRANCH 。这解释了为什么您只看到一个分支。

您可以解决此问题:

  • 通过在 Web UI 中将“Git 浅克隆”设置为 0,或者
  • 通过在 .gitlab-ci.yml 中设置 GIT_DEPTH: 0 来禁用浅克隆,或者
  • 通过 pull/获取您需要的任何其他分支,例如git fetch origin master

引用the docs on shallow cloning .

关于Git 仅在 GitLab 中记录不明确的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60298600/

相关文章:

git - 提交时无法设置 refs/heads/master

Gitlab打不开目录

gitlab-ci - 如何根据分支名称将 Gitlab 管道复制到目录

docker - 具有外部包依赖性的 Golang 测试未通过 Gitlab Ci,但通过本地

git如何禁用推送

linux - 如何创建 .git 文件

git - 如何在 VS Code 中管理多个 git 仓库

git - 使用 Jenkins Git Publisher 推送标签 - 多个 Git 存储库(fork)

ssh - GitLab CI/CD 通过 SSH 部署脚本不起作用 -> 未 protected 私钥文件

docker - 在 docker 中添加主机重定向