管道中的合并请求目标分支和源分支之间的GitLab差异 [英] Gitlab diff between Merge Request Target branch and Source Branch in pipeline

查看:19
本文介绍了管道中的合并请求目标分支和源分支之间的GitLab差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的用途包括查找合并请求和主分支或发布分支(我希望与之不同的任何分支)之间的差异,MR将设置CI_MERGE_REQUEST_TARGET_BRANCH

CHANGED_DIRS=$(git diff --name-only ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}...${CI_COMMIT_REF_NAME} | xargs -L1 dirname | uniq | cut -d'/' -f1 |tail -n+2 | uniq)

但是GitLab似乎无法识别合并请求目标分支diff,并提供此输出。

fatal: ambiguous argument 'master...source': unknown revision or path not in the working tree.

如何找到diff(即目录)。 感谢帮助!

推荐答案

这不是真正的Git问题,而是GitLab-CI问题。但是,这些特殊问题在多个CI/CD系统中突然出现,总是有相同的一般原因:

  • 完全克隆大型存储库速度较慢。
  • CI系统通常从克隆存储库开始。
  • 因此,CI系统通常从创建存储库的不完整克隆开始。
  • Git过去只提供了两种方法:1浅克隆单分支克隆。事实上,它们往往是一起使用的:使用git clone --depth number创建浅层克隆也会创建单分支克隆,除非您也通过添加--no-single-branch来强制覆盖Git的默认设置。

现在,任何给定CI/CD系统中的clone命令都可以控制,也可以在提供您作为开发人员可用的任何软件旋钮之前由CI/CD系统执行。如果您可以影响命令,通常可以这样做,但如果不能,您仍然可以通过运行其他Git命令来纠正该问题(这同样取决于CI/CD系统):

  • git remote set-branches --add允许您向单个分支克隆添加各种分支;
  • git fetch --depth numbergit fetch --deepen numbergit fetch --unshallow是更改现有浅克隆的深度或完全取消深度限制的三种方式。

如果您的CI/CD系统创建了浅层的单分支克隆,并且您需要具有更多远程跟踪名称的更深的克隆,则可以使用git remote和/或git fetch来实现。

由于我没有使用过GitLab的CI系统,这里无法提供菜谱,但根据comments,听起来他们默认使用--depth 50。如果您有一个深度旋钮,则将其设置为零(0)是禁用--depth参数的通常方式,这也会禁用单一分支性。

请注意,无论系统如何克隆您的存储库,您通常只有一个分支名称,或者在通过标记克隆时甚至没有(分离头)。完整克隆将具有完整的远程跟踪名称集,而单分支克隆将只有一个远程跟踪名称,直到您使用git remote调整此名称并运行后续git fetch以添加更多远程跟踪名称。

使用GitHub操作时,默认情况下,v2签出创建浅层单分支克隆,而v1签出创建完整克隆。


1现在还有第三种方法,即所谓的部分克隆WithPromisor Remote。这可以说是CI系统完成任务的正确方式,但是由于很多原因,部分克隆还不是很好,所以这可能需要等待实现的改进。

这篇关于管道中的合并请求目标分支和源分支之间的GitLab差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆