vgd*_*dub 5 git gitlab gitlab-ci
我的用途包括查找 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)
Run Code Online (Sandbox Code Playgroud)
但 gitlab 似乎无法识别合并请求目标分支差异并给出此输出。
fatal: ambiguous argument 'master...source': unknown revision or path not in the working tree.
Run Code Online (Sandbox Code Playgroud)
如何找到差异(目录)。感谢帮助!
我通过更改命令解决了这个错误
git diff --name-only ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}...${CI_COMMIT_REF_NAME}
到
git diff --name-only remotes/origin/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}...remotes/origin/${CI_COMMIT_REF_NAME}。
看来 gitlab runner 没有任何本地分支机构。所以我们必须告诉它比较远程分支之间的差异。
这并不是真正的Git问题,而是 GitLab-CI 问题。然而,这些特殊问题在多个 CI/CD 系统中突然出现,总是出于相同的一般原因:
git clone --depth number--no-single-branch现在,任何给定 CI/CD 系统中的克隆命令都可以是可控的,或者可以在提供开发人员可用的任何软件旋钮之前由CI/CD 系统完成。如果您可以影响该命令,那么通常就是可行的方法,但如果不能,您仍然可以通过运行其他 Git 命令来纠正问题(这又取决于 CI/CD 系统):
git remote set-branches --add允许您将各种分支添加到其他单分支克隆中;git fetch --depth number、、 和是改变现有浅层克隆深度或完全消除深度限制的三种方法。git fetch --deepen numbergit fetch --unshallow如果您的 CI/CD 系统进行浅层单分支克隆,并且您需要具有更多远程跟踪名称的更深克隆,则可以使用git remote和/或 来获得git fetch。
由于我没有使用过 GitLab 的 CI 系统,所以我无法在这里提供配方,但根据评论,听起来他们--depth 50默认使用。如果您有深度旋钮,则将其设置为零 ( 0) 是禁用该参数的常用方法--depth,这也会禁用单分支性。
请注意,无论系统如何克隆您的存储库,当通过标签克隆时,您通常只有一个分支名称,甚至可能没有(分离的 HEAD)。完整克隆将具有一整套远程跟踪名称,而单分支克隆将只有一个远程跟踪名称,直到您使用git remote调整它并运行后续命令git fetch来添加更多远程跟踪名称。
使用 GitHub Actions,v2签出默认情况下会进行浅单分支克隆,而v1签出会进行完整克隆。
1现在有第三种方法,即所谓的带有承诺遥控器的部分克隆。这可以说是 CI 系统实现这一目标的正确方法,但由于多种原因,部分克隆还不是很好,因此这可能需要等待实现的改进。
| 归档时间: |
|
| 查看次数: |
5196 次 |
| 最近记录: |