Git 简介

版本控制

版本控制(Version Control System, VCS)记录了文件的变化,便于查阅或恢复到某个时刻的文件状态。

版本控制系统主要有三种:

  • 本地版本控制(Local Version Control System)

    所有修订版本的信息都存储在本地。磁盘损坏可能损坏记录。

  • 中心式版本控制(Centralized Version Control System, CVCS)

    所有修订版本的信息都存储在中心服务器上,协同工作的用户们通过客户端连接服务器,以此取出文件或提交更新。优点是便于管理员管理,缺点是中心服务器宕机会导致无法进行任何工作。

  • 分布式版本控制(Distributed Version Control System, DVCS)

    客户端取出文件时,会克隆整个仓库。任一协同服务器的故障都可以从克隆仓库中恢复。

Git 属于分布式版本控制系统。

Git 简史

2005 年,分布式版本控制系统 BitKeeper 所在公司与 Linux 内核开源社区合作结束;后者无法继续使用 BitKeeper 进行版本控制。因此 Linux 开源社区开发了自己的版本系统,称为 Git。Git 仍遵循着其设计初衷:

  • 速度

  • 简洁的设计

  • 支持数量众多的并行开发分支

  • 完全分布式

  • 能够高效管理具有 Linux 或更大规模的大型项目

基本的 Git 工作特点:

  • Git 记录每个版本的快照,而不是相对上个版本的变更。这使得 Git 与其他大部分版本控制系统都不相同。

  • Git 使用 SHA-1 散列建立内部的索引,显示为 40 位 16 进制字符。

  • Git 很少执行删除指令,因此信息误丢失的可能极小。

Git 仓库、工作目录与暂存区

Git 仓库是保存对象数据库的地方。工作目录是从仓库中提取的某版本的文件内容,可能包含你的修改。暂存区保存了你下次要提交到仓库的内容。

在 Git 中托管的文件有三种状态:

  • 已提交(commited):文件更改已记录到仓库中;如果所有文件均已被提交,那么工作目录状态从 Staged 变为 Unmodified。

  • 已修改(modified):文件被修改了(与最后一次提交的文件不同),但修改尚未记录;如果任何文件已被修改,那么工作目录状态从 Unmodified 变为 Modified。

  • 已暂存(staged):文件已被修改且被标记,将在下一次提交中记录到仓库;如果所有文件均已暂存,那么工作目录状态从 Untracked 与Unmodified 变为 Staged。

_images/git-status-cycle.png

Git 文件的状态变化周期(图源: 官方 Git 手册(第二版) 第 2.2 节)

git 中的 HEAD 指针总是指向当前位置(最后一次提交),除非人为地移动它。