我的使用涉及在 Merge Request 和 Master 或 Release 分支(我想与之比较的分支)之间找到差异,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 无法识别合并请求目标分支差异并给出此输出。
fatal: ambiguous argument 'master...source': unknown revision or path not in the working tree.
我如何找到差异(即目录)。 感谢帮助!
答案 0 :(得分:0)
这实际上不是 Git 问题,而是 GitLab-CI 问题。然而,这些特殊问题会出现在多个 CI/CD 系统中,原因总是相同:
git clone --depth number
进行浅层克隆,也可以进行单分支克隆,除非您还通过添加 --no-single-branch
强行覆盖 Git 的默认设置。现在,任何给定 CI/CD 系统中的 clone 命令 可能是可控的,或者可以由 CI/CD 系统之前完成> 提供了可供您作为开发人员使用的任何软件旋钮。如果您可以影响命令,那通常是可行的方法,但如果不能,您仍然可以通过运行其他 Git 命令来纠正问题(这又取决于 CI/CD 系统) :
git remote set-branches --add
允许您将各种分支添加到其他单分支克隆;git fetch --depth number
、git fetch --deepen number
和 git fetch --unshallow
是改变现有浅层克隆深度或完全消除深度限制的三种方法。如果您的 CI/CD 系统制作了一个浅层的单分支克隆,并且您需要一个具有更多远程跟踪名称的更深层次的克隆,您可以使用 git remote
和/或 git fetch
来实现。
由于我没有使用过 GitLab 的 CI 系统,我无法在这里提供配方,但基于 comments,听起来他们默认使用 --depth 50
。如果您有深度旋钮,将其设置为零 (0
) 是禁用 --depth
参数的常用方法,这也会禁用单分支。
请注意,无论系统如何克隆您的存储库,您通常只有一个 branch 名称,或者在通过标签克隆时甚至没有(分离的 HEAD)。完整克隆将具有一整套远程跟踪名称,而单分支克隆将只有一个远程跟踪名称,直到您使用 git remote
对其进行调整并运行后续git fetch
添加更多远程跟踪名称。
使用 GitHub Actions,默认情况下 v2
结帐会生成浅层单分支克隆,而 v1
结帐会生成完整克隆。
1现在有第三种方法,所谓的部分克隆和promisor remotes。对于 CI 系统来说,这可以说是正确的方法,但是由于很多原因,部分克隆还不是很好,所以这可能需要等待实现的改进。