打增量包无非 “选文件”, “打包” 两个操作
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) |