git如何打包压缩文件?如何压缩全部或增量或某次提交的文件?对于git来说,都是可以实现的,而且非常方便。主要使用git的archive
命令
//打包master
git archive --format=zip --output master.zip master
//打包head
git archive --format=zip --output head.zip HEAD
//打包tag
git archive --format=zip --output v1.0.0.zip v1.0.0
2.1 打包最后修改的文件(不管有没有add或commit),只要
git diff
有变化就会打包
git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD^)
2.2 打包两个分支之间的差异
git archive --format=zip -o update.zip HEAD $(git diff --name-only master 1.0.0)
2.3 打包两个版本(commit)间的差异
git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD~2)
2.1
不一样)
// 打包成tar
git archive --output=files.tar HEAD $(git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT HEAD)
// 打包成zip
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提交的文件。
如下,只打包39355ad5a316cb56a53b7a9c4da62df984ba0fdd
id后提交的文件
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提交的内容了
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
都换了,就能打包这两个版本间的差异了
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 idnew_commit_id
: 某次提交的commit id
git archive --format=zip --output=files.zip HEAD $(git diff-tree -r 39355ad5a316cb56a53b7a9c4da62df984ba0fdd --name-only --diff-filter=ACMRT fe6619b74c4db4c1172e8e29570db415e50a5866)
打包两个版本间的差异,还可以使用
//git diff --name-only old_commit_id new_commit_id | xargs tar -jcvf update.tar.bz2
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/
Unable to negotiate with 106.52.160.162 port 22: no matching host key type found. Their offer: ssh-rsa fatal: Could not read from remote repository.
使用git hooks(post-receive)实现简单的远程自动部署
linux下,设置git免密码操作
**git cherry-pick**可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.
在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等。特别是在Commit之后又执行了`git reset --hard HEAD`强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了。碰到这种情况,不要慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。
它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。
当在git操作log,如`git log`后,然后非正常退出,即使用`CTRL+C`退出,这个时候git输入命令就不会显示了,只有光标,这时怎么办?
.gitignore文件配置不生效
git修改当前项目用户
Git修改最近一次已经提交了的commit及push
git常用命令,git查看某个文件的修改记录,分支备注
通过设置git-diff driver,结合.gitattributes文件,使git diff命令忽略某些目录。例如我们只希望看到比较src目录,不希望看到比较dist目录
学习这本书的目的是让你了解版本控制,并且尽可能快速简单的掌握 Git。但是和另外一些关于介绍版本控制的图书不一样,阅读这本书并不需要你有很专业的 IT 或者电脑背景知识,它也面向那些编程的初学者,软件构架师,或者是项目经理。在技术方面你也不需要有很多专业知识,我们会以循序渐进的方式帮助你来理解版本控制和掌握 Git。
git如何打包增量文件?
github push时免密码