[TOC]
Git介绍
1 版本控制系统概述
版本控制用于记录文件内容的变化,以便查看各版本修订情况。
无论你是开发人员,还是网页设计人员,甚至是绘图人员,记录文件的修订都是必不可少的,都会采用版本控制系统(VCS)。
通过版本控制系统你可以:
- 回溯文件状态
- 比较文件变化细节
1.1 版本控制系统分类
本地版本控制系统
大多数采用简单数据库记录文件历次更新的差异。
最流行的本地版本控制系统是RCS,它在本地硬盘上保留文件补丁,通过应用补丁可以得到文件的各个版本。
集中版本控制系统
为了使不同系统上的开发者协作,出现了集中版本控制系统(Centralized Version Control Systems,CVCS),通过一个集中管理的服务器,保存所有文件的修订版本,开发者通过客户端连接到服务器,取出最新版本或提交更新。
代表系统包括:CVS、Subversion.
优势:
- 权限控制
- 集中管理
劣势:
- 服务器宕机,团队无法工作
- 服务器数据丢失,会丢失所有版本记录
分布式版本控制系统
分布式版本控制系统(Distributed Version Control System,DVCS),客户端不仅保留文件最新版本快照,而且对代码仓库进行完整镜像。每次克隆操作都是对代码仓库的完整备份,因此,服务器发生故障,可以通过任何一个本地仓库进行恢复。代表系统包括:Git、Mercurial。
2 Git介绍
2.1 Git起源
Git起源与Linux,Linux内核维护最初提交到BitKeeper上,到2005年BitKeeper的商业公司收回Linux内核社区免费使用BitKeeper的权利,Linus Torvalds决定开发自己的版本系统。
2.2 Git的设计目标
- 速度快
- 设计简单
- 并行开发分支
- 完全分布式
- 高效管理超大规模项目
2.3 Git特性
-
直接记录快照,而非差异
Git和其他版本控制系统(比如Subversion)的重要区别是数据处理方式。像CVS,Subversion这样的系统,将保存的信息看成一组基本文件和每个文件随着时间逐步累积的差异。
Git把数据看出对小型文件系统的一组快照。你每次提交更新或者Git保存项目状态时,Git对当时的全部文件做成一个快照,并保存快照的索引,当文件没有修改,就不重新存储该文件,而是保留一个指向之前文件的链接。Git更像一个小型文件系统
-
本地执行
大多数操作都是访问本地文件和资源,本地磁盘保存了项目的完整历史,避免了网络开销,提高响应速度。查看文件修改历史时也是和本地文件进行比较,不用拉取服务器的文件。
没有网络时,也可以进行git操作,当联网后,再上传到远程服务器。
-
完整性校验
Git底层对所有数据在存储前都做校验和
-
Git只添加数据,不会清除数据,提交到Git的内容不会丢失
2.4 文件的三种状态
文件存在三种状态:
- 已提交(committed):数据已存储到本地数据库中
- 已修改(modified):修改了文件,但没有保存到数据库中
- 已暂存(staged):对已修改文件的当前版本做了标记,将包含在下次提交的快照中。
Git项目三个工作区域:Git仓库、工作目录、暂存区域
工作目录(工作区)
从Git仓库中提取出的某个版本的独立文件,供你使用或修改
就是你在电脑里能看到的目录,比如我的myrep文件夹就是一个工作区:
暂存区域
是一个文件,保存下次要提交文件的列表信息,通常在Git仓库目录中
Git仓库(版本库)
保存项目元数据和对象数据库,克隆项目时拷贝的就是Git仓库的数据
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
远程仓库
前面的版本仓库只的是本地仓库,而git作为最优秀的分布式版本控制系统,仅仅在本地进行管理肯定是不够的。这是我们需要一个远程仓库,也可以叫做git服务器,让电脑可以随时随地从远程服务器克隆版本库到本地电脑,然后修改后同步更新到远程服务器,这样可以让多人协同随时随地进行工作,真正意义体现分布式版本控制系统的意义。
开源git服务器:
2.5 Git工作流程
- 在工作目录中修改文件
- 暂存文件,将文件快照放入暂存区域
- 提交更新,找到暂存区域的文件,将快照永久存储到Git仓库
- 推送到远程版本库