如何检查/列出具有多个提交的PR中所有更改的文件

3
我想要检查在一个可能有多个提交的PR中更改的文件。我已经看到了许多关于如何查看两个提交之间更改的文件的答案,但那不是我的用例。
我的仓库中有一个名为“test-proxy”的文件夹。只有当“test-proxy”文件夹发生更改时,我才会在流水线中触发“test-proxy”部署阶段。
比如说,我打开了一个PR:
提交1——“test-proxy”文件夹没有更改——>“test-proxy”部署阶段不触发(符合预期)
提交2——“test-proxy”文件夹有更改——>“test-proxy”部署阶段触发(符合预期)
提交3——“test-proxy”文件夹没有更改——>“test-proxy”部署阶段不触发(不符合预期)!
这不是理想的,因为“test-proxy”测试用例可能在提交2中失败,如果该阶段不再运行,则会被忽略。我们不能让开发人员决定确保该阶段通过,应该由流水线处理。
现在,为了运行此PR的“test-proxy”部署阶段,开发人员将不得不对该文件夹进行虚拟提交。
请帮助解决上述问题。
我尝试过其他答案中找到的大多数git命令。这两个命令尽管不能给出确切的结果,但它们是我在流水线中使用的命令:
1.git diff-tree --name-only HEAD^ HEAD | grep test-proxy
2.git show --no-commit-id --name-only -r $(git log --pretty=format:'%h' -n 1) | grep test-proxy
期望的结果是:
当PR中的任何提交更改“test-proxy”文件夹时,“test-proxy”部署阶段应始终触发。

嘿,只是为了澄清,您想在更改发生时部署特定的提交吗?因为这是我从您的示例中理解的。 - Dominik Wosiński
1个回答

3
你希望检测出Pull Request的最新修改与它从你当前分支(称为master)分离的点之间的任何差异:
git diff-tree --name-only $(git merge-base master HEAD) HEAD -- test-proxy

如果您只是想知道是否有更改,请添加--quiet--exit-code

最初的回答:

git diff-tree --quiet --exit-code $(git merge-base master HEAD) HEAD -- test-proxy

请注意,如果在test-proxy中没有更改,这将报告成功。"no"为否定词,表示“没有”的意思。

1
非常感谢!由于我是通过Jenkins使用上述命令,所以我不得不进行一些微小的更改(git merge-base refs/remotes/origin/master HEAD)。 - heretolearn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接