最近的项目中,团队使用GitHub来作为协作工具,但是由于每次或几次的修改文件需要替换到正式的环境中,而正式的环境中为了不影响系统的运行又没有安装GitHub,所以每次更新文件都要手动的一个一个去对比、替换,效率低下,而且还容易出现错误。

既然GitHub这么强大,那么有没有命令可以将某几次修改的文件自动按照路径打包呢?这样的话再去替换修改文件就十分的方便了,于是就是论坛和博客去寻找大佬们的方法。。。

找了很久发现大概有两个比较方法的方法都可以实现我们的需求:

第一种方法,git archive 命令,git中提供一个打包归档的命令就是archive,起初我们也是使用了这个,但是发现有点时候遇到删除文件的时候,该命令就会出错,于是就开始了第二次寻找之旅。。。

发现git diff 有一种方式也可以提供打包的功能,命令如下:

git diff 624cd90 55ed97e --name-only | xargs tar -czvf update.tar.gz

但是遇到删除文件的时候,还是会出现错误;经过仔细阅读文档之后,发现git diff命令可以通过增加–diff-filter命令来过滤文件变动方式,只操作自己需要的变动方式具体参数如下:

Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R)

上面几个分别对应的是,新增;复制;删除;修改;重命名

于是上面的打包命令可以变成

git diff --diff-filter=ACMR 624cd90 55ed97e --name-only | xargs tar -czvf update.tar.gz

过滤掉删除的文件,这样就可以顺利的打包成功,再将压缩包复制到正式环境中进行替换就没有问题了

(PS:如果想打包到最近一次提交,将后面的commit-id换成HEAD即可)