git本身是有tags功能的,在不同的tag之间切换是非常方便的,但是现在有一个需求就是:需要找出两次提交(有前后关系的)之间的差异文件,这一般用在需要增量升级的系统中。
找了一下,似乎没有直接的命令可以达到这个目的,只好曲线救国了,幸亏找到了方法!
git的日志查看功能,可以看到每次提交的ID
$ git log --name-onlycommit 47f88153de2dc2f48a13908a109b7dca991f8730Author: 阿信sxqDate: Wed Aug 24 15:15:41 2016 +0800 为下个版本修改版本号pom.xmlcommit 309632842c80d95f5f316aded1bef538ca8fd99aAuthor: 阿信sxq Date: Wed Aug 24 14:53:13 2016 +0800 删除多余的注释src/main/java/cn/songxinqiang/tool/ConfFileUtil.java
拿到了ID就可以定位每一次的提交。
突破点就在git diff命令,查看差异,这个命令有很多参数样式,我们这里需要的是查看两次提交之间的差异文件,但是我们不关心文件内容,只关心文件名及路径,所以我们这样做
$ git diff 2362accf3e7be23e30 47f88153de2dc2f48a1 --name-onlypom.xmlsrc/main/java/cn/songxinqiang/tool/ConfFileUtil.java
于是就可以看到两次提交之间的变化文件了。这里需要说明的是,diff后面的两个ID,前一个是开始的ID后一个是结束的ID,在这两次(包含结束不包含开始)之间的变动文件就会列表出来。
拿到了文件的路径列表,接下来就好办了,配合xargs命令我们简单点,直接打包出来
$ git diff 2362accf3e7be23e30 47f88153de2dc2f48a1 --name-only | xargs tar -zcvf diff.tar.gzpom.xmlsrc/main/java/cn/songxinqiang/tool/ConfFileUtil.java
这个命令需要在仓库的根路径执行,因为给出的文件路径是基于根路径的,打包命令根据需要修改,也可以使用cp命令进行,这个命令执行后产生了一个叫做"diff.tar.gz"的文件,解压之后就是所列的文件。