Gitlab-CI中的分支与头之间的Git差异
我试图获得一个文件列表,这些文件在执行Gitlab CI管道的分支和远程源(称为main)上的分支之间是不同的 我知道当gitlab CI管道运行时,它会克隆特定的分支,看起来它会剥离所有远程源和分支 因此,我执行一个git fetch来检索远程分支,这将使我成为main(origin/main) 但从那以后,我尝试了git-diff、git-diff-tree、git-diff-merge-base的每一种组合,结果一无所获Gitlab-CI中的分支与头之间的Git差异,git,gitlab,gitlab-ci,git-diff,Git,Gitlab,Gitlab Ci,Git Diff,我试图获得一个文件列表,这些文件在执行Gitlab CI管道的分支和远程源(称为main)上的分支之间是不同的 我知道当gitlab CI管道运行时,它会克隆特定的分支,看起来它会剥离所有远程源和分支 因此,我执行一个git fetch来检索远程分支,这将使我成为main(origin/main) 但从那以后,我尝试了git-diff、git-diff-tree、git-diff-merge-base的每一种组合,结果一无所获 有人有什么建议吗?我不明白你的定义的确切含义,但我认为你在寻找: g
有人有什么建议吗?我不明白你的定义的确切含义,但我认为你在寻找:
git diff --name-only origin/main HEAD
或:
git diff --name-only origin/main...HEAD # 3 dots
也许对于
--name status
而不是--name only
,您能更准确地解释一下“执行Gitlab CI管道的分支与远程源(称为main)上的分支不同的文件列表”的意思吗?您的CI系统可能设置为创建一个分支,浅克隆。这意味着您没有其他提交。使用<代码> Git FETCH 可以解决问题,但也应该考虑更改CI系统以使用完整的克隆。不管你怎么做,都会有折衷办法。@torek,实际上我就是这么做的,git fetch解决了这个浅层克隆。Gitlab CI显然在创建管道时没有完成我发现的完整克隆。因此,我在管道语句的顶部添加了git fetch。@LeGEC,基本上,我的最终目标是获得此分支中已更改的文件列表,与生产中的主分支相比。您可以撤消浅分支和单分支克隆,但它需要的不仅仅是一个git fetch
:请参阅。这就是为什么我建议首先找到一种方法让CI系统进行完整克隆:这可能更简单。一般来说,“差异”绝对是你的第一选择。第二个是其他的东西,比如“来源/来源”中的“来源/来源”和“来源/来源”中的“来源和来源”之间的差异“分支。也许在这种情况下,它们会产生相同的结果,但使用第一个在语义上更正确。我来试试这个,很难记住我尝试过的具体内容。因为我可能可以通过git fetch来解析浅层克隆,并通过这种方式进行git diff,因为本地分支认为它是头部?好的,所以请继续搜索@LeGEC是正确的。缺少的是关于删除浅克隆的评论。一旦我做到了,并且使用了第二行,我就得到了我所需要的。非常感谢。