如何解决Bitbucket服务器API:查找分支的合并基础
摘要
Bitbucket 服务器(不是Cloud)API是否提供与git merge-base branch1 branch2
等效的功能,以找到两个分支的共同祖先?
详细信息
我们想使用Bitbucket API来确定某个功能分支何时“过旧”,即一段时间内未从主分支或其他主分支(开发,发行等)进行重新设置或合并到该分支中-例如一周。我看到以下REST端点
/rest/api/1.0/projects/EXAMPLE/repos/exampleRepo/commits/?since=release/1.2.3&until=bugfix'
在上面的示例中,这可以使所有提交不在 release/1.2.3
上。在使用基于分支的分支的情况下,这很好-我将找到最早的分支特定的提交,并且其父级是merge-base。
但是,有些人确实合并了提交以更新功能分支(例如,在功能分支上的git merge release/1.2.3
),而我能想到的最好的办法是:
- 解析
Merge branch 'release/1.2.3' of <repo> into bugfix
的提交消息,这似乎很脆弱,因为有人可能会重写合并提交消息 - 与两个父母一起找到最近的提交,第二次提交(似乎是源分支),在源分支上查找它,如果找到,则以此为基础确定共同先验者的年龄。
解决方法
也许找到合并基础的一种解决方法是检查release/1.2.3
的历史记录:
如果release/1.2.3
的历史记录足够规律,也许您会更愿意看
.../commits/?since=bugfix&until=release/1.2.3
并从该列表中获取最后提交的父项。
我本来建议添加一个--first-parent
选项,但是API似乎没有提供该标志。
我没有尝试过,但是从理论上讲应该可以工作
端点
/rest/api/1.0/projects/EXAMPLE/repos/exampleRepo/commits/?since=release/1.2.3&until=bugfix'
同样适用于非基础分支。该端点等效于
git rev-list bugfix ^release/1.2.3
这正是您所需要的。
bugfix C1---C2---C3----C4
/ / /
release/1.2.3 -R0----R1-------R2---R3
在这种情况下
git rev-list bugfix ^release/1.2.3
将返回
C4
C3
C2
C1
因此C1的父级将成为该基准的基础。
如果分支bugfix
将合并到release/1.2.3
bugfix C1---C2---C3----C4--
/ / / \
release/1.2.3 -R0----R1-------R2---R3--R4--R5
在这种情况下,您将需要找到R4,
git rev-list ^bugfix release/1.2.3
或
/rest/api/1.0/projects/EXAMPLE/repos/exampleRepo/commits/?since=bugfix&until=release/1.2.3'
这应该返回
R5
R4
R3
因此,您需要遍历R5
,R4
和R3
,并检查C4
是否是父母。一旦找到R4
,您就可以带着父母并打电话给终点
/rest/api/1.0/projects/EXAMPLE/repos/exampleRepo/commits/?since=R3&until=C4'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。