git - 检测 git 分支仅触及特定路径

标签 git jenkins bitbucket

背景

在我的项目中,bitbucket 上的 pull 请求由 Jenkins 构建验证。构建和测试大约需要 50 分钟。这非常有效。

问题

有一些更改不会影响工作代码(前端相关)。因此,如果 pull 请求仅涉及两个子目录之一,则没有必要进行构建和运行测试。目的是节省时间(更少的时间来发布较小的无害更改)和资源(不要占用构建机器进行无用的工作)。

我不想拆分项目(可能的解决方案之一),因为前端的更改通常需要更改实际的后端代码,因此在这种情况下需要进行测试。

可能的解决方案

我找到了阻止 Jenkins 构建的方法,并在第一步成功获取新代码。

问题是如何询问 git 分支(更改)是否只涉及两个子目录。这可能需要这样的东西:

git diff master...featureBranch  <some other options> 

可能的替代方案

或者也许还有其他方法来解决这个问题?使用 bitbucketJenkins 的某些功能?

最佳答案

实现您想要的效果的最简单方法可能是使用 git loggit diff,因为两者都可以采用转速范围和路径:

git log [<options>] [<revision range>] [[--] <path>…​]
git diff [<options>] <commit> <commit> [--] [<path>…​]

例如,要测试最新提交是否涉及目录1和/或目录2,您可以使用:

git log --oneline HEAD^..HEAD directory1 directory2

对于否定匹配,排除路径规范应该可以解决问题:

git log --oneline HEAD^..HEAD -- '.' ':(exclude)./directory1'

或者类似地使用 diff:

git diff HEAD^..HEAD '.' ':(exclude)directory'

关于git - 检测 git 分支仅触及特定路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233543/

相关文章:

linux - git 子模块已经存在但它不存在?

node.js - 如何在 Windows 7 中删除 git 本地存储库文件夹

ssh:无法解析主机名 bitbucket.org:不知道这样的主机

git - 为什么 Git 不提示我输入密码?

java - 在 Jenkins 文件夹中的任何地方都找不到 config.xml

git - 推送到远程分支(更新 ref 失败)

macos - 将两个 SSH key 与 GitHub 以及连接多路复用一起使用

git:重新定位时冲突提交去了哪里

jenkins - 我如何将 Jenkins 与 Atlassian Stash 一起使用?

jenkins - 在 Jenkins 中将文件从桌面复制到作业工作区的插件