refdiff 插件的计算提交版本差异算法

本文介绍了refdiff插件用于计算Git提交版本差异的算法,包括问题背景、已有解决方案的不足,以及如何通过数学建模和算法实现解决批量、自动化差异计算的问题。文章还探讨了算法的选择,指出最短路径算法并不适用,而应采用有向无环图的最近公共祖先算法。最后,展示了算法执行的逻辑和时空复杂度分析。
摘要由CSDN通过智能技术生成

本文作者:Nddtfjiang
个人主页:http://nddtf.com/github/

什么是 计算提交版本差异(CalculateCommitsDiff)?

我们常常需要计算两个提交版本之间的差异。具体的说,就是需要知道两个不同的分支/标签之间相差了哪些提交版本

对于一般用户来说,通过计算提交版本差异,用户能迅速的判断两个不同的分支/标签之间在功能、BUG 修复等等方面的区别。以帮助用户选择不同的分支/标签来使用。

而如果只是使用 diff 命令来查看这两个不同的分支/标签的话,大量庞杂冗余的代码修改信息就会毫无组织的混杂在其中,要从中提取出具体的功能变更之类的信息,等同于大海捞针。

对于一款致力于提升研发效能的产品来说,通过计算提交版本差异,就能查看一组组不同的分支/标签的变迁状况,这一数据的获取,有助于我们做进一步的效能分析。

例如,当一个项目的管理者,想要看看为什么最近的几个版本发版越来越慢了的时候。就可以对最近的几组分支/标签来计算计算提交版本差异。此时有些分支/标签组之间有着大量的提交版本,而有些分支/标签组之间有着较少的提交版本。项目管理者可以更进一步的计算这些提交版本各自的代码当量,把这些数据以图表的形式展示出来,最终得到一组很直观的分支/标签的图像。此时他或许就能发现,原来是因为最近的几次发版涉及到的变更越来越复杂了。通过这样的直观的信息,开发者和管理者们都能做出相应的调整,以便提升研发效能。

在这里插入图片描述

已有的解决方案

当我们在 GitLab 上打开一个代码仓库的时候,我们可以通过在 url 末尾追加 compare 的方式来进入到仓库的比对页面。

在这里插入图片描述

在这里插入图片描述

在该页面,我们可以通过设置源分支/标签目标分支/标签GitLab 向我们展示 目标分支落后于源分支哪些版本,以及落后了多少个版本。

设置完毕后,GitLab 会展示如下:

在这里插入图片描述

在这里,我们能看到我们选择的目标分支/标签源分支/标签少了如图所示的提交版本(Commits)

然而遗憾的是,像 GitLab 这类解决方案,都没有做批量化,自动化的处理。也更没有对后续的计算出来的结果进行相应的数据汇总处理。用户面对海量的分支提交的时候,既不可能手动的一个一个去比较,也不可能手动的去把数据结果自己复制粘贴后再分析。

因此 DevLake 就必须要解决这个问题。

所谓的计算提交版本差异具体是在计算什么?

GitLab 的计算过程为例来说的话,所谓的计算提交版本差异也就是当一个提交版本源分支/标签存在,但是在目标分支/标签不存在的时候,这个提交版本就会被 GitLab 给逮出来。

那么,或许有人会问,假如一个提交版本源分支/标签不存在,相反的,在目标分支/标签存在,那是不是也会被抓起来呢?

答案是,不会

也就是说,当我们计算提交版本的差异的时候,我们只关心目标分支/标签缺少了什么,而并不关心目标分支/标签多出来了什么东西。

这就好像以前有一位算法竞赛的学生,在 NOI 比赛结束后被相关学校面试的时候,一个劲的自我介绍自己担任过什么广播站青协学生会,什么会长副会长之类的经历。结果很快就惹得面试官老师们忍无可忍的告诫道:

我们只想知道你信息学方面的自我介绍,其余的我都不感兴趣!!!

在计算提交版本差异时,GitLab 是这样。 GitHub 也是这样。事实上,在使用 git 命令 git log branch1...branch2 的时候,git 也是这样的。

它们都只关心目标分支/标签相对于源分支/标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值