第一章:Git 的特点
-
集中式 VS 分布式:
- 集中式版本控制系统:
- 集中化的版本控制(Centralized Version Control Sytems,简称 CVCS)。这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交最新。多年以来,这已成为版本控制的标准做法。如图:

- 缺点:中央服务器的单点故障,如果宕机一小时,那么在这一小时,谁都无法提交更新,也就无法协同工作就。要是中央服务器的磁盘发生故障,刚好没有做备份或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端偶然提取出来的保存在本地某些快照数据就成了恢复数据的希望。但这样的话依然是个问题,不能保证所有的数据都已有人事先完整提取出过。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
- 集中化的版本控制(Centralized Version Control Sytems,简称 CVCS)。这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交最新。多年以来,这已成为版本控制的标准做法。如图:
- 分布式版本控制系统:
- 分布式版本控制系统(Distributed Version Control System,简称:DVCS)会把服务器上的代码仓库完整的镜像下来。这样每个人的电脑上都有一份完整的服务器代码仓库的镜像,任意一处协同工作的服务器发生故障,事后都可以用个人电脑上的镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份(如图)。我们可以看到电脑 A 与电脑 B 与服务器上的版本内容完全一致。

- 分布式版本控制系统(Distributed Version Control System,简称:DVCS)会把服务器上的代码仓库完整的镜像下来。这样每个人的电脑上都有一份完整的服务器代码仓库的镜像,任意一处协同工作的服务器发生故障,事后都可以用个人电脑上的镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份(如图)。我们可以看到电脑 A 与电脑 B 与服务器上的版本内容完全一致。
- 集中式版本控制系统:
-
版本存储方式的差异:
- 直接记录快照,而非差异比较:
- Git 和其他版本控制系统的主要区别在于,Git 只关心文件数据的整体是否变化,而大多数其他系统只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar 等)每一次记录都有哪些文件做了更新,以及都更新了哪些内容,如下图:

- Git 并不保存这些前后变化的差异数据。实际上,GIt 更像是把变化的文件做快照后,记录在一个微型的文件系统中。每次提交变化时,他会总览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。Git 的工作方式如图所示:

- Git 和其他版本控制系统的主要区别在于,Git 只关心文件数据的整体是否变化,而大多数其他系统只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar 等)每一次记录都有哪些文件做了更新,以及都更新了哪些内容,如下图:
- 近乎所有的操作都是本地执行:
- 在 Git 中的绝大多数操作都只要访问本地文件资源,不用联网。但如果用 CVCS 的话,差不多所有操作都需要连接网络。因为 Git 在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。
- 举例:如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上取数据,而直接从本地数据库读取后直接展示。所以任何手都可以马上翻阅,无需等待。如果想要看到当前版本的文件和一个月的版本之间有何差异,Git 会取出一个月前的快照和当前文件做一次差异运算,而不用请求远程服来做这件事,或是把老版本的文件拉到本地来做比较。
- 用 CVCS 的话,没有网络或者断开 VPN 就无法做任何事情,但用 Git 的话,就算你在飞机或者火车上,都可以频繁提交更新,等到有了网络再上传到远程仓库。换做其他版本控制系统,几乎不能这么做
- 直接记录快照,而非差异比较:
第二章:Git 的安装
- Git 支持 Linux、Windows 和 Mac 系统安装,可以到 Git 官网直接下载安装程序









第三章:Git 仓库的基本概念和流程
-
版本库:
- 版本库又名仓库,英文名 reponsitory,可以简单理解为一个目录,这个目录里面的所有文件都已被 Git 管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时候都可以追踪历史,或者再未来某个时刻还可以将文件 "还原"。
-
Git 仓库的基本概念:
- 远程仓库:
- 也叫做资源库,是远程机器上的代码,用于做不同版本文件交换更新。如:GItlab、GitHub,Gitee
- 本地库:
- 使用户在本地创建的目录,拥有远程仓库的一个快照,由工作区和版本库构成
- 工作区( Workspace ):
- 本地库的根目录中除 .git 目录下的 index 文件 (.git / index)中,用于临时需要保存内容的修改
- 暂存区( stage / index ):
- 也叫做缓存区,暂存信息存放在 .git 目录下的 index 文件(.git / index) 中,用于临时保存内容的修改
- 版本库(.git 目录):
- 是本地库的根目录中一个隐藏目录 .git,用于记录版本信息,Git 进行版本控制所需要的文件,则都放在 .git 文件夹中。
- 分支( Branch ):
- 本地库中默认创建一个主分支( master )分支,分支意味着你可以从开发主线上分离开来,然后在不受影响主线的同时继续工作
- 本地库和远程库的关系:

- 开发人员通过 Git 命令来管理代码,最常用的 6 个命令如下:

- 远程仓库:
-
GIt 仓库的工作流程:
- 克隆远程库:从远程上克隆完整的 Git 仓库(包括代码和版本信息) 到本地
- 在本地上修改代码:在本地上根据不同的开发目的,创建分支,修改代码
- 提交到分支:在本地分支上提交代码
- 把修改合并到本地分支:在本地库上的最新代码 fetch 下来,跟本地主分支合并。如果存在冲突,则解决冲突
- 把本地主分支提交到远程仓库:生成补丁(patch),把补丁发送给远程仓库

374

被折叠的 条评论
为什么被折叠?



