一、Git简介
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
很多人都知道,Linus在1991年创建了开源的Linux,从此Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的。这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了。于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年被打破了。开发Samba的Andrew试图破解BitKeeper的协议,被BitMover公司发现了,于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery、PHP、Ruby等。
二、Git的特点
1. 集中式 vs 分布式
集中式版本控制系统(CVCS)
集中化的版本控制系统如CVS、Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
缺点:
-
中央服务器的单点故障:如果宕机一小时,谁都无法提交更新
-
如果中央服务器的磁盘发生故障,碰巧没做备份,就会有丢失数据的风险
-
最坏的情况是彻底丢失整个项目的所有历史更改记录
分布式版本控制系统(DVCS)
分布式版本控制系统会把服务器上的代码仓库完整地镜像下来。这样每个人的电脑上都有一份完整的服务器代码仓库的镜像,任何一处协同工作用的服务器发生故障,事后都可以用个人的电脑上的镜像恢复。
2. 版本存储方式的差异
直接记录快照,而非差异比较
Git和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。
-
其他系统:在每个版本中记录着各个文件的具体差异
-
Git:每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。若文件没有变化,Git不会再次保存,而只对上次保存的快照作一链接。
3. 近乎所有操作都是本地执行
在Git中的绝大多数操作都只需要访问本地文件和资源,不用连网。
-
浏览项目的历史更新摘要,Git直接从本地数据库读取
-
查看当前版本和一个月前版本的差异,Git取出快照作差异运算
-
在飞机或火车上也可以愉快地频繁提交更新,等到了有网络的时候再上传到远程仓库
三、Git的安装
Git支持Linux、Windows和Mac系统,安装Git可以到Git官方网站直接下载安装程序。









四、Git仓库的基本概念和流程
什么是版本库?
版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件"还原"
Git仓库基本概念
远程仓库( Remote ):
也叫作资源库,是远程机器上的代码库,用于做不同版本库文件交换更新。如Gitlab,GitHub,gitee。
本地库( Repository ):
是用户在本地创建的目录,拥有远程库的一个快照,由工作区和版本库构成。
- 工作区(Workspace ):
本地库的根目录中除.git目录以外的内容,存储内容的实际文件。
- 暂存区(stage/Index ):
也叫做缓存区,暂存信息存放在.git目录"下的index文件(.git/index)中,用于临时保存内容的修改;
- 版本库(.git 目录)
是本地库的根目录中的一个隐藏目录.git,用于记录版本信息,Git进行版本控制所需要的文件,则都放在.git文件夹中;