git - 如何通过多次提交检查/列出 PR 中更改的所有文件

标签 git pull-request jenkins-groovy

我想检查在可能有多个提交的 PR 中更改的文件。我已经看到多个关于如何查看两次提交之间更改的文件的答案,但这不是我的用例。 我的仓库中有一个名为“test-proxy”的文件夹。仅当测试代理文件夹发生更改时,我才会在管道中触发测试代理部署阶段。 说,我开一个 PR

提交 1 - test-proxy 文件夹中没有更改 -> test-proxy 部署阶段不会触发(预期)

提交 2 - test-proxy 文件夹中的更改 -> test-proxy 部署阶段触发器(预期)

提交 3 - test-proxy 文件夹中没有更改 -> test-proxy 部署阶段不会触发 -(不是预期的)!

这并不理想,因为测试代理测试用例可能在提交 2 中失败,如果该阶段不再运行,这将被忽略。我们不能让开发人员自行决定以确保阶段通过。它应该由管道处理。 现在,为了运行此 PR 的测试代理部署阶段,开发人员必须对该文件夹进行虚拟提交。

请帮助解决上述问题。

我已经尝试了在其他答案中找到的大部分 git 命令进行测试。这两个是我的管道中的那些,尽管它们没有给出确切的结果 -

  1. git diff-tree --name-only HEAD^ HEAD | grep 测试代理

  2. git show --no-commit-id --name-only -r $(git log --pretty=format:'%h' -n 1) | grep 测试代理

预期-

当 PR 中的任何提交对 test-proxy 文件夹进行更改时,test-proxy 部署阶段应始终触发。

最佳答案

您想检测 PR 的尖端与 PR 从当前分支(称为 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 中没有 更改,这将报告成功。

关于git - 如何通过多次提交检查/列出 PR 中更改的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55629940/

相关文章:

git - Heroku 可以在部署时忽略 git 子模块吗?

GitHub - 只允许拉取请求

git - 在 Azure DevOps Git 中强制使用分支命名约定

git - 如何修改 GitHub pull request?

groovy - 在 Groovy 和 Jenkins Pipeline 中组合多个 collectEntries

git - 整个团队收到 'too many unreachable loose objects' 消息

git - `git merge origin master` 和 `git merge origin/master` 之间有什么区别吗?

linux - Git 初始推送错误文件描述符错误

jenkins - 在 Jenkins 管道中发送松弛消息时 cps 不匹配

jenkins - 为什么 currentBuild.build().getActions(ParametersAction).get(0) 返回默认参数值而不是 Jenkins 管道中的指定值?