怎样在Git log中获取两个主要版本之间的变更记录

来源:互联网 发布:hl线切割锥度编程视频 编辑:程序博客网 时间:2024/05/14 14:04

这是科研中遇到的现实问题,觉得解决过程挺有意思的,简单记录一下:

我们知道Git的Commit都是用SHA1 Hash值表示的,通过git log命令实际上很容易对多个Commit进行统计、查询、显示。但是在软件工程领域的研究中,我们通常会比较关心某个软件在两个版本之前是怎样演化的,这时候简单操作SHA1值是得不到我们想要的结果的。所以要实现这个需求还稍微有点麻烦:

我们知道,Git中可以通过打标签标示重要、主要的版本演化,例如我们可以参考这里的介绍:

http://blog.csdn.net/liuyuntianxia_128/article/details/53840493

我们以Apache Ant为例,如果输入:

git tag

会显示Apache Ant的所有主要版本,例如:ANT_170和ANT_198_RC1,这两个Tag很好理解,分别是ant 1.7.0和ant 1.9.8-RC。

接下来我们希望能获取上面两个版本之间的所有Commit记录,应该怎么做呢?

网上实际上已经有很多对git log命令的介绍,例如这里:

http://blog.csdn.net/wh_19910525/article/details/7468549

另外实际上在Git官网上也有多git log命令的简介:

https://www.git-scm.com/docs/git-log

但是都没有能完全满足上面这个需求的,仔细看看下面这个网页,可以看到有这样一个例子:

git log v2.6.12.. include/scsi drivers/scsi

似乎可以指定从哪个Tag开始,那也应该可以指定从哪个Tag结束吧,简单找了找,发现果然在StackOverflow上有人问这个问题了:

http://stackoverflow.com/questions/8136178/git-log-between-tags

所以要实现我们的目标,其实也很简单:

git log ANT_170..ANT_198_RC1 --name-status > version-log-ant.txt

将log输出到一个txt文件中,然后就可以进行后续分析了。

如果想知道每次Commit修改了哪些行,可以用这个命令:

git log ANT_170..ANT_198_RC1 --stat > change-details.txt

就是这个简单的过程,但也经历了一些探索,所以简单总结一下,希望对其他朋友会有点帮助。

0 0