博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git提取出两个版本之间的差异文件并打包
阅读量:6692 次
发布时间:2019-06-25

本文共 868 字,大约阅读时间需要 2 分钟。

  
 3年前 (2013-09-11) 
 22678浏览 
 

公司的项目原先是使用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进行打包

总结

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

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

转载地址:http://odjoo.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
php memcache
查看>>
lvm管理-扩展
查看>>
Git 如何拆除核弹起爆码,以及 topgit 0.7到0.8的变迁
查看>>
zencart网站怎么隐藏 51la ,cnzz的统计代码图标
查看>>
MacOS X,安装和配置Maven
查看>>
phonegap支持打电话
查看>>
LAMP之apache安装
查看>>
Linux 部署websphere
查看>>
Nginx自动跳转https
查看>>
chapter1 Accessing the command line using the local console
查看>>
“can’t create transaction lock on /var/lib/rpm/__db.000”错误解决
查看>>
siege 测试
查看>>
微博一键分享主要通过对指定 URL 添加各种参数来实现
查看>>
panabit+syslog打造中小型企业流量监控系统
查看>>
苏州朋友公司 windows server 2008 打印机管理
查看>>
我的友情链接
查看>>
aotufs
查看>>
Mysql服务启动1067错误
查看>>
HTML小结
查看>>