git提取出两个版本之间的差异⽂件并打包
公司的项⽬原先是使⽤svn做版本管理,发布项⽬的时候是采⽤打包的⽅式压缩成zip格式的⽂件,然后⽤ftp上传。随着开发⼈员越来越多,需求变化也⽐较多,经常在开发新功能时要调整线上的问题,在⼀个分⽀上进⾏开发就⾮常不⽅便。虽然svn也⽀持多分⽀开发,但是操作⾮常不便,于是就把项⽬的版本管理切换成了git。
切换成git之后,为了平缓的过度,发布项⽬的时候还是打算使⽤打包的⽅式,然后ftp上传。那么问题就来了:git如何提取出两个提交之间的差异⽂件呢?
⼀开始了git format-patch和git archive都没有到需要的功能,后来就去查git diff命令,到了⽅法。
git diff这个命令能⽐较两个提交之间的差异,使⽤–name-only参数可以只显⽰⽂件名。例如:
$ git diff 608e120 4abe32e --name-onlygit常用指令
git diff列出两个提交之间差异的⽂件
git diff列出两个提交之间差异的⽂件
就能成功打包了。只是这样的话也太⿇烦了吧,幸好linux有提供⼀个命令xargs能将前⼀个命令的输出转成另外⼀个命令的参数,按照这个思路就⾮常简单了
$ git diff 608e120 4abe32e --name-only | xargs zip update.zip
git diff列出两个提交之间差异的⽂件结合xargs进⾏打包
git diff列出两个提交之间差异的⽂件其实这种发布⽅式并不是⾮常好,如果线上的环境也能使⽤版本管理就⾮常⽅便了,只是这需要多⽅⾯的的配合。从某种意义上来讲,这种打包更新⽅式只是⼀种折中的处理⽅式。
还⼀个问题是这样的:提交的排序是按照时间来进⾏的,如果有分⽀合并进来的,可能分⽀⾥的提交时间在上次发布的提交时间之前,这样是否会漏打包到⽂件呢?答案是不会的,因为合并分⽀会产⽣⼀个新的提交,这个提交⼀定是在上次发布的提交之后。
注:常⽤命令
git diff filename 查看尚未暂存的某个⽂件更新了哪些
git diff –cached filename 查看已经暂存起来的某个⽂件和上次提交的版本之间的差异
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 查看某两个版本的某个⽂件之间的差异