本文作者: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 也是这样的。
它们都只关心目标分支/标签
相对于源分支/标签
缺