开发者社区> 梁东升> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

git提取出两个版本之间的差异文件并打包

简介: git提取出两个版本之间的差异文件并打包  Linux运用  陈杰斌  3年前 (2013-09-11)  22678浏览  3评论 [编辑] 公司的项目原先是使用svn做版本管理,发布项目的时候是采用打包的方式压缩成zip格式的文件,然后用ftp上传。
+关注继续查看

git提取出两个版本之间的差异文件并打包

 Linux运用  陈杰斌  3年前 (2013-09-11)  22678浏览  3评论 [编辑]

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

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

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

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

$ git diff 608e120 4abe32e --name-only
git diff列出两个提交之间差异的文件

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

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

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

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

$ git diff 608e120 4abe32e --name-only | xargs zip update.zip
结合xargs进行打包

结合xargs进行打包

总结

其实这种发布方式并不是非常好,如果线上的环境也能使用版本管理就非常方便了,只是这需要多方面的的配合。从某种意义上来讲,这种打包更新方式只是一种折中的处理方式。

还一个问题是这样的:提交的排序是按照时间来进行的,如果有分支合并进来的,可能分支里的提交时间在上次发布的提交时间之前,这样是否会漏打包到文件呢?答案是不会的,因为合并分支会产生一个新的提交,这个提交一定是在上次发布的提交之后。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Git——常用命令的总结
Git——常用命令的总结
20 0
Git命令简单使用
最近经常使用Github,每次修改个文件代码都要在网页端操作,感觉效率低下,所以简答学习了解了一下Git命令。至使于可以在命令行进行管理Git仓库,这样就不需要每次都要打开网页版Github进行操作。
14 0
git 命令记录贴
git 命令记录贴
34 0
Git常用命令
Git常用命令
16 0
git常用命令详解
git常用命令详解
27 0
Git常用命令
Git常用命令
24 0
常用Git命令整理
常用Git命令整理
57 0
【硬核】工作第一天不会Git被辞退,200条Git命令大全
哈喽,大家好,我是一条。 现在有了idea,很多的 Git 命令我们都不是很常用。 但是我们也要记得一些常用 Git 命令来应变一些特殊的场景。 因为不会git真的会被辞退。 一条吐血整理了一些的常用的一些 Git 命令,希望能帮助到大家 希望大家一键三连走一走,大家的支持就是一条创作最大的动力。
47 0
Git命令使用总结
1.在GitHub上创建了一个新项目,如何将本地的一个工程上传上去 1) copy github项目地址 2) 在android studio中打开terminal命令行,执行命令将本项目所有代码添加 git add * 3)执行命令提交 git co...
1074 0
git 常用命令及问题解决(转)
git init 产生的目录解释error: src refspec master does not match any.引起该错误的原因是,目录中没有文件,空目录是不能提交上去的error: insufficient permission for adding an object to repository database .
985 0
+关注
梁东升
老男孩一枚
111
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载