1.Git和其他VCS的区别?
(1)其他VCS主要保存的是文件的变动,而Git每次保存的都是文件的一个快照,如果文件没有改变,则直接保存一个指向上次版本文件的引用,如果文件改变了,就保存整个文件快照,所以Git更像是一个微型的文件系统。 (2)Git几乎所有的操作都是本地的,因为Git每次都分布式的保存了文件的所有版本,不需要从网络上拉取数据。 (3)Git上提交的所有东西都是被校验和验证的,校验和会和文件一起保存,这意味着不能在Git不知道的前提下改变任何文件和目录。Git所使用的验证码称为SHA-1哈希码,该码由40个十六进制字符组成,然后根据文件和目录的内容来计算。Git不是根据文件名来存储,而是根据hash值来存储。
2.Git Three States?
Git保存文件主要有三个阶段:commited,modified,staged。Commited代表文件被保存在本地数据库;Modified代表已经更改了文件,但还没有commit到本地数据库;Staged表示已经标记了更改的文件,并进入下一次提交快照。这三个阶段对应了三个目录:Git目录,working目录,staging区域。
3.Git编译安装?
请参考文档
4.Git配置?
通过git config命令来配置,主要有三个文件用于保存配置: (1)/etc/gitconfig:保存系统全局配置,适用于所有用户,通过参数–system。 (2)~/.gitconfig或者~/.config/git/config文件:对不同的用户,通过–global实现。如果不加该参数会暂时覆盖 (3).git/config文件:适用于单个仓库的情形。
5.Responsity中的文件状态?
Responsity中的文件有tracked和untracked状态。Tracked文件表示在最新的snapshot中存在;Untracked文件表示不在snapshot和stage的文件。示意图如下:
6.Git忽略文件?
可以在Git仓库中添加.gitingore文件来忽略添加文件。忽略文件内容格式请参考Git Book,如果不小心添加了忽略的文件,可以使用git rm命令直接删除,该命令可以使用通配符。
7.查看Commit History?
我们使用git log命令来查看提交历史,加上-p参数来显示每次提交的差别,也可以使用–stat来显示短的状态。还可以使用–pretty来自定义格式。参数如下表,也可以使用–graph来直观查看。具体可参考文档
Option | Description | |||
%H | Commit hash | |||
%h | Abbreviated commit hash | |||
%T | Tree hash | |||
%t | Abbreviated tree hash | |||
%P | Parent hashes | |||
%p | Abbreviated parent hash | |||
%an | Author name | |||
%ae | Author email | |||
%ad | Author date(formate respects the –date=option) | |||
%ar | Author date,relative | |||
%cn | Committer name | |||
%ce | Committer email | |||
%cd | Committer date | |||
%cr | Committer date,relative | |||
%s | Subject |
8.Git撤销更改?
Git使用git commit –amend命令来合并上次的提交。详解可以看图:
Git使用git reset HEAD
9.远程访问仓库?
首先使用git remote add添加远程仓库,然后使用git fetch来获取远程仓库,最后使用git merge来合并到本地分支。git pull命令合成了fetch和merge命令。使用git remote show
10.Git添加标记?
使用git tag命令查看标记,也可以使用-l来查找固定格式的tag。
git tag -l “v1.*”
Git主要使用两种类型的tags:lightweight和annotated。后者比前者更多的信息。 创建Annotated标签:
git tag -a v1.4 -m “version 1.4”
把tag推动到远程仓库中:
git push origin –tags
11.Git别名?
git别名命令:
git config –global alias.co checkout
git config –global alias.br branch
git config –global alias.ci commit
11.Git数据存储格式?
Git数据存储格式如图所示:
如果此时提交,则保存快照,如下图所示:
12.Git分枝?
git的一个分枝就是上图中commits的一个轻量级指针,git中默认使用master分枝来保存最新的一次提交。master分枝和提交历史的图如下所示:
使用git branch命令来创建分枝,结构如下所示:
Git中使用HEAD指针来表示当前在哪个分枝,创建分枝并不会切换分枝,如图所示:
如果使用git checkout testing命令来切换分枝,则HEAD会指向testing分枝,如下图所示:
13.Branch在实际项目中的应用?
(1)切换到你的工作分枝
(2)发现需要修补的功能,创建新的分枝进行开发
(3)测试开发功能,并合并到产品中
(4)切换到原先的分枝去
14.Git merge操作?
使用命令git merge命令把分枝merge到当前分枝,主要的merge操作请参考网页
15.Rebase使用?
合并两个分枝主要有merge和rebase两种方式,rebase用于把一个分枝合并到另一个分枝上而不创建新的分枝,首先我们有两个分枝,如下图所示:
使用rebase命令后,如下图所示:
最后执行merge命令。
16.Git协议? Git传输数据一共有4种协议:Local,HTTP,SSH,Git。