Skip to main content

Git 提取出两个版本间差异文件并打包

公司的项目原先是使用 svn 做版本管理,发布项目的时候是采用打包的方式压缩成 zip 格式的文件,然后用 ftp 上传。随着开发人员越来越多,需求变化也比较多,经常在开发新功能时要调整线上的问题,在一个分支上进行开发就非常不方便。虽然 svn 也支持多分支开发,但是操作非常不便,于是就把项目的版本管理切换成了 git。

切换成 git 之后,为了平缓的过度,发布项目的时候还是打算使用打包的方式,然后 ftp 上传。那么问题就来了:git 如何提取出两个提交之间的差异文件呢?

一开始找了 git format-patchgit archive 都没有找到需要的功能,后来就去查 git diff 命令,找到了方法。

git diff 这个命令能比较两个提交之间的差异,使用–name-only 参数可以只显示文件名。例如:

git diff 608e120 4abe32e --name-only

git diff 列出两个提交之间差异的文件

这个输出结果非常有意思,就是差异文件的相对地址,不正好是压缩命令的参数吗?于是立马使用压缩命令

zip update.zip c/environ.c ... 所有的文件...

就能成功打包了。只是这样的话也太麻烦了吧,幸好 linux 有提供一个命令 xargs 能将前一个命令的输出转成另外一个命令的参数,按照这个思路就非常简单了。

git diff 608e120 4abe32e --name-only | xargs zip update.zip

结合 xargs 进行打包