git提取出两个版本之间的差异文件并打包
2016-07-16 15:15
381 查看
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
![](http://www.01happy.com/wp-content/uploads/2013/09/git-diff%E5%88%97%E5%87%BA%E4%B8%A4%E4%B8%AA%E6%8F%90%E4%BA%A4%E4%B9%8B%E9%97%B4%E5%B7%AE%E5%BC%82%E7%9A%84%E6%96%87%E4%BB%B6.png)
git diff列出两个提交之间差异的文件
这个输出结果非常有意思,就是差异文件的相对地址,不正好是压缩命令的参数吗?于是立马使用压缩命令
$ zip update.zip c/environ.c ... 所有的文件...
就能成功打包了。只是这样的话也太麻烦了吧,幸好linux有提供一个命令xargs能将前一个命令的输出转成另外一个命令的参数,按照这个思路就非常简单了。
$ git diff 608e120 4abe32e --name-only | xargs zip update.zip
![](http://www.01happy.com/wp-content/uploads/2013/09/%E7%BB%93%E5%90%88xargs%E8%BF%9B%E8%A1%8C%E6%89%93%E5%8C%85.png)
结合xargs进行打包
总结
其实这种发布方式并不是非常好,如果线上的环境也能使用版本管理就非常方便了,只是这需要多方面的的配合。从某种意义上来讲,这种打包更新方式只是一种折中的处理方式。
还一个问题是这样的:提交的排序是按照时间来进行的,如果有分支合并进来的,可能分支里的提交时间在上次发布的提交时间之前,这样是否会漏打包到文件呢?答案是不会的,因为合并分支会产生一个新的提交,这个提交一定是在上次发布的提交之后。
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- 6 个托管 git 仓库的地方
- Git远程操作详解
- 25个 Git 进阶技巧(翻译)
- 详解版本控制利器Git,SVN的异同以及适用范围
- Android-App增量更新的使用姿势
- Ruby实现的删除已经合并的git分支脚本分享
- 在 Shell 提示符中显示 Git 分支名称的方法
- Git使用基础篇(一些常用命令和原理)
- git 使用及常用命令
- git eclipse 插件的安装
- git fork同步是什么意思?
- Git使用小坑 Out of memory错误的解决方法
- Python的高级Git库 Gittle
- 使用GIT进行源码管理――GUI客户端小结