打增量包无非 “选文件”, “打包” 两个操作
1.筛选差异文件
git
比较差异当然是 git diff
命令了
语法如下:
1 | git diff [options] [<commit>] [--] [<path>…] |
options 有这么一个参数
1 | --name-only |
可以试一下, 比较本地 master
和 origin/master
的差异
1 | git diff master origin/master --name-only |
OK 这就是我们需要的
2.打包
有了文件列表,打包就好办了
用 tar
命令打包
1 | tar -zcvf diff.tar.gz $(git diff master origin/master --name-only) |
用 zip
命令打包
1 | zip -q -r diff.zip $(git diff master origin/master --name-only) |
用 git archive
命令打包
其实最实用的还是直接用git的归档命令打包
好处就是不需要额外东西 windows下的PowerShell
和git bash
也能用
语法
1 | git archive [<options>] <tree-ish> [<path>...] |
archive
命令支持的打包格式可以用git archive -l
查看
正常情况可以省略--format
,git
会根据输出的文件名判断格式
打包代码如下:
1 | git archive -o diff.zip master $(git diff master origin/master --name-only) |
linux 还可以用上管道符号
1 | git archive master $(git diff master origin/master --name-only) | gzip > diff.zip |
注意:如果 diff
命令结果是空 archive
会打包整个项目
3.常用增量包命令
当前分支与master差异包
1 | git archive -o update.zip HEAD $(git diff master --name-only) |
最后一次commit差异包
1 | git archive -o lastcommit.zip HEAD $(git diff HEAD^ --name-only) |
从 x
中提取 x
与 y
的差异文件打包.
x
,y
可以是 分支, tag, commit
1 | git archive -o x_y.zip x $(git diff x y --name-only) |