使用Gitlab API获取commit增删统计时合并提交数据不符如何解决
GitLab API获取合并提交统计差异问题解决方案
现有API使用方式的合理性说明
你当前使用的GET /projects/:id/repository/commits/:sha是GitLab官方提供的合法commit查询端点,普通提交场景下返回结果和页面对齐是正常的,合并提交场景的数值偏差不是API调用错误,而是两者统计逻辑不一致导致的:
- API返回的统计是Git原生的commit diff结果:合并提交默认和它的第一个父提交做diff计算增删行数
- GitLab页面上合并提交对应的统计数值,实际展示的是该合并请求独有的变更量,会排除源分支和目标分支共同祖先已经包含的变更,所以两者统计结果会出现明显差异
可用的替代API方案
有两种API可选,可根据你的实际需求选择:
- 如果需要和GitLab页面展示的合并请求变更量完全对齐:
先通过合并提交的SHA查询到关联的合并请求IID,再调用GET /projects/:id/merge_requests/:merge_request_iid接口,返回值中的additions、deletions字段就是页面展示的统计数值;也可以调用GET /projects/:id/merge_requests/:merge_request_iid/diffs拿全量diff的stats字段获取相同结果 - 如果需要从commit维度自行控制统计逻辑:
调用GET /projects/:id/repository/commits/:sha/diff获取该commit的全量diff内容,可自行选择合并提交的对比父节点(比如对比两个父节点的共同祖先),自行计算增删行数,适配你需要的统计规则
注意事项
如果你的自托管GitLab版本低于13.0,上述部分接口的返回字段结构可能存在差异,建议先匹配你部署的GitLab版本对应的接口规则。
内容的提问来源于stack exchange,提问作者Jayesh_naik
相关产品推荐
相关产品推荐

