首页
Javascript
Html
Css
Node.js
Electron
移动开发
工具类
服务端
浏览器相关
前端收藏
其他

git打包成tar\zip文件

2018年05月30日 发布 阅读(302) 作者:懒炖

git如何打包压缩文件?如何压缩全部或增量或某次提交的文件?对于git来说,都是可以实现的,而且非常方便。主要使用git的archive命令

1、打包所有文件

  1. //打包master
  2. git archive --format=zip --output master.zip master
  3. //打包head
  4. git archive --format=zip --output head.zip HEAD
  5. //打包tag
  6. git archive --format=zip --output v1.0.0.zip v1.0.0

2、打包增量

2.1 打包最后修改的文件(不管有没有add或commit),只要git diff有变化就会打包

  1. git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD^)

2.2 打包两个分支之间的差异

  1. git archive --format=zip -o update.zip HEAD $(git diff --name-only master 1.0.0)

2.3 打包两个版本(commit)间的差异

  1. git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD~2)
2.4 打包最近一次提交的内容(没有提交不打包,与2.1不一样)
  1. // 打包成tar
  2. git archive --output=files.tar HEAD $(git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT HEAD)
  3. // 打包成zip
  4. git archive --format=zip --output=files.zip HEAD $(git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT HEAD)

2.4.1 如果打--no-commit-id换成某次提交的ID,这个ID后提交的文件都会被打包,不包含这个ID提交的文件。
如下,只打包39355ad5a316cb56a53b7a9c4da62df984ba0fddid后提交的文件

  1. git archive --format=zip --output=files.zip HEAD $(git diff-tree -r 39355ad5a316cb56a53b7a9c4da62df984ba0fdd --name-only --diff-filter=ACMRT HEAD)

2.4.2 如果把最后的HEAD换成某次提交的ID,就能打包当前ID提交的内容了

  1. git archive --format=zip --output=files.zip HEAD $(git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT fe6619b74c4db4c1172e8e29570db415e50a5866)

2.4.3 如果把--no-commit-id和最后的HEAD都换了,就能打包这两个版本间的差异了

  1. git archive --format=zip --output=files.zip HEAD $(git diff-tree -r old_commit_id --name-only --diff-filter=ACMRT new_commit_id)

old_commit_id: 某次之前的commit id
new_commit_id: 某次提交的commit id

  1. git archive --format=zip --output=files.zip HEAD $(git diff-tree -r 39355ad5a316cb56a53b7a9c4da62df984ba0fdd --name-only --diff-filter=ACMRT fe6619b74c4db4c1172e8e29570db415e50a5866)

打包两个版本间的差异,还可以使用

  1. //git diff --name-only old_commit_id new_commit_id | xargs tar -jcvf update.tar.bz2
  2. git diff --name-only 39355ad5a316cb56a53b7a9c4da62df984ba0fdd fe6619b74c4db4c1172e8e29570db415e50a5866 | xargs tar -jcvf update.tar.bz2

参考:
https://www.awaimai.com/1485.html
https://blog.csdn.net/wen_jing_1211/article/details/78672586
https://blog.miniasp.com/post/2014/04/01/Git-Export-Only-Added-Modified-Files.aspx
http://blog.nutsfactory.net/2010/02/01/git-archive-and-log/

版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处

评论

  •  
  • svn转git,文件hash值不同电脑不一样

    项目从svn迁到git了,遇到的一个坑:前端工程化打包,会给每个js\css\img文件名添加一个hash值,svn下这个一点问题没有,迁到git后,hash值在不同的电脑上总是不一样。那是什么原因呢?也许你还会发现,有些本来没有修改过的文件,在"git status"时也提示有修改,需要提交。

    发布:2019-06-12 阅读(50)

  • 使用git hooks(post-receive)实现简单的远程自动部署

    使用git hooks(post-receive)实现简单的远程自动部署

    发布:2019-06-05 阅读(73)

  • linux下设置git(pull,push等)免密码操作

    linux下,设置git免密码操作

    发布:2019-06-04 阅读(77)

  • 源文件名长度大于文件系统支持的长度。请尝试将其移动到具有较短路径名称的位置,或者在执行此操作前尝试将其重命名为较短的名称

    源文件名长度大于文件系统支持的长度。请尝试将其移动到具有较短路径名称的位置,或者在执行此操作前尝试将其重命名为较短的名称

    发布:2019-05-07 阅读(148)

  • git cherry-pick使用指南

    **git cherry-pick**可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.

    发布:2018-12-28 阅读(339)

  • 找回Git中丢失的Commit(git如何撤消reset操作)

    在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等。特别是在Commit之后又执行了`git reset --hard HEAD`强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了。碰到这种情况,不要慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。

    发布:2018-12-28 阅读(305)

  • git bisect 命令教程

    它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。

    发布:2018-12-27 阅读(336)

  • git输入不显示,只有光标在闪的问题

    当在git操作log,如`git log`后,然后非正常退出,即使用`CTRL+C`退出,这个时候git输入命令就不会显示了,只有光标,这时怎么办?

    发布:2018-12-26 阅读(317)

  • .gitignore文件配置不生效

    .gitignore文件配置不生效

    发布:2018-12-24 阅读(330)

  • git修改当前项目用户

    git修改当前项目用户

    发布:2018-12-11 阅读(292)