强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Git 完全指南 / 01 - 简介:版本控制概念、Git 历史、集中式 vs 分布式

第一章:Git 简介

理解版本控制的本质,是掌握 Git 的第一步。


1.1 什么是版本控制

版本控制(Version Control System, VCS)是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。它允许你:

  • 回溯历史:将文件回退到之前的某个状态
  • 追踪变更:查看每次修改的内容、时间和作者
  • 并行协作:多人同时在同一项目上工作而不互相覆盖
  • 分支实验:创建独立的实验分支,不影响主线代码
  • 备份恢复:分布式系统天然具备完整备份能力

版本控制的演进

本地版本控制 → 集中式版本控制 → 分布式版本控制
 (RCS, 1982)    (CVS/SVN, 1990s)   (Git, 2005)
阶段代表工具核心特点缺陷
本地 VCSRCS本地补丁文件管理无法协作
集中式 VCSCVS、Subversion单一中央服务器单点故障
分布式 VCSGit、Mercurial每个节点完整镜像学习曲线陡

1.2 Git 的诞生历史

背景:Linux 内核的版本管理困境

2005 年之前,Linux 内核开发使用 BitKeeper 这一商业分布式版本控制系统。BitKeeper 的许可证持有方 Larry McVoy 撤销了对开源社区的免费使用许可,迫使 Linux 内核社区寻找替代方案。

Linus Torvalds 的创造

2005 年 4 月 3 日,Linux 之父 Linus Torvalds 开始编写 Git。他的设计目标极为明确:

  1. 速度优先:分布式操作必须快
  2. 简单设计:内部数据结构清晰
  3. 完全分布式:支持离线工作
  4. 防止篡改:内容通过 SHA-1 哈希校验
  5. 高效处理大项目:支持像 Linux 内核这样的超大型仓库

💡 趣闻:Git 这个名字有多重含义。Linus 自嘲说这是"the stupid content tracker"(愚蠢的内容追踪器)。在英式俚语中,git 意为"讨厌的人"。

里程碑时间线

时间事件
2005-04-03Linus 开始编写 Git
2005-04-07首次用于 Linux 内核提交
2005-06Git 性能已足够支撑内核开发
2005-07Junio Hamano 成为维护者
2007Git 被广泛采用,超越 BitKeeper
2008GitHub 上线,推动 Git 全球普及
2022迁移至 SHA-256,修复 SHA-1 漏洞

1.3 集中式 vs 分布式

集中式版本控制(Centralized VCS)

集中式系统如 CVSSubversion (SVNN) 使用单一中央服务器存储所有版本数据。

┌─────────────┐
│ 中央服务器   │  ← 所有版本历史
│  (Single     │
│   Server)    │
└──────┬───────┘
       │ 网络
  ┌────┼────┐
  ▼    ▼    ▼
用户A 用户B 用户C  ← 只有最新版本快照

工作流程

  1. 开发者从中央服务器 checkout 最新代码
  2. 本地修改后 commit 到中央服务器
  3. 必须联网才能提交和查看历史

致命缺陷

  • 🔴 单点故障:服务器宕机,所有人无法工作
  • 🔴 单点丢失:服务器硬盘损坏,历史全部丢失
  • 🔴 网络依赖:所有操作都需要网络连接
  • 🔴 分支笨重:创建和合并分支代价高昂

分布式版本控制(Distributed VCS)

Git 等分布式系统中,每个开发者本地都有完整的仓库克隆。

┌──────────┐    ┌──────────┐    ┌──────────┐
│ 开发者 A  │◄──►│ 开发者 B  │◄──►│ 开发者 C  │
│ 完整仓库  │    │ 完整仓库  │    │ 完整仓库  │
└──────────┘    └──────────┘    └──────────┘
      ▲               ▲               ▲
      └───────────────┼───────────────┘
                      │
              ┌───────▼───────┐
              │ 远程仓库 (可选) │
              │  (GitHub等)    │
              └───────────────┘

核心优势

  • 🟢 离线工作:所有操作本地完成,无需网络
  • 🟢 完整备份:每个克隆都是完整备份
  • 🟢 极速操作:本地操作,无需等待网络
  • 🟢 灵活工作流:支持多种分支和合并策略

详细对比表

特性集中式 (SVN)分布式 (Git)
仓库结构单一中央仓库每个开发者拥有完整仓库
离线操作❌ 不支持✅ 完全支持
分支代价重量级,较慢轻量级,瞬间完成
合并效率较慢,易冲突极快,智能合并
速度依赖网络本地操作极快
存储效率中等高(打包压缩)
学习曲线平缓较陡
单点故障🔴 严重🟢 无
权限控制细粒度目录权限仓库级别(需平台支持)
大文件支持原生支持需要 LFS 扩展
原子提交✅ (Git 更快)
适用场景企业内网、权限管控开源项目、分布式团队

1.4 Git 的核心设计理念

1.4.1 快照而非差异

传统 VCS(如 SVN)存储的是文件差异(delta)

版本1 → [diff] → 版本2 → [diff] → 版本3

Git 存储的是文件快照(snapshot)

版本1 [完整快照] → 版本2 [完整快照] → 版本3 [完整快照]

💡 Git 对未修改的文件只存储引用指针,不会造成空间浪费。

1.4.2 三层架构

┌─────────────────────────────────────────┐
│            工作区 (Working Directory)     │  ← 你编辑文件的地方
├─────────────────────────────────────────┤
│            暂存区 (Staging Area)          │  ← git add 后的区域
│            也叫 Index                     │
├─────────────────────────────────────────┤
│            仓库 (Repository)              │  ← git commit 后的永久记录
│            .git 目录                       │
└─────────────────────────────────────────┘
层级存储位置操作命令说明
工作区项目目录直接编辑你看到和编辑的文件
暂存区.git/indexgit add准备提交的变更快照
仓库.git/objectsgit commit永久保存的版本记录

1.4.3 一切皆对象

Git 的对象模型(Object Model)包含四种核心对象:

对象类型说明存储内容
blob文件快照文件内容
tree目录快照文件名、blob/tree 引用
commit提交记录作者、时间、tree 引用、父提交
tag标签指向 commit 的引用
commit ←── tree ←── blob (file1.md)
   │         ├── blob (file2.md)
   │         └── tree (subdir)
   │                 └── blob (file3.md)
   ▼
parent commit ←── tree ←── ...

1.4.4 内容寻址存储

Git 使用 SHA-1 哈希(2022 后逐步迁移至 SHA-256)作为对象的唯一标识:

# 文件内容决定了它的哈希值
$ echo "Hello Git" | git hash-object --stdin
557db03de997c86a4a028e1ebd3a1ceb225be238

# 相同内容永远产生相同哈希
$ echo "Hello Git" | git hash-object --stdin
557db03de997c86a4a028e1ebd3a1ceb225be238

这意味着:

  • 相同内容只存储一次(去重)
  • 任何篡改都能被检测到
  • 完整性校验内建于系统中

1.5 Git 的应用领域

Git 已远远超越代码管理的范畴:

应用场景说明
软件开发最主流的代码版本管理
文档协作技术文档、书籍写作
配置管理服务器配置、IaC (Infrastructure as Code)
数据科学数据集版本管理、模型追踪
学术研究论文版本管理、实验记录
游戏开发资源管理(配合 LFS)
网站部署Git-based 部署(如 Netlify、Vercel)
笔记管理Obsidian、Logseq 等工具的底层同步

1.6 Git 的版本命名规范

Git 的版本号格式:主版本.次版本.修订版本

版本线特点
2.30+推荐最低版本,支持 sparse-checkout cone mode
2.38+支持 SHA-256 实验特性
2.40+性能优化、安全修复

查看当前版本:

$ git --version
git version 2.45.0

业务场景

场景为什么选择 Git
初创团队协作GitHub/GitLab 免费方案,低成本启动
开源项目贡献行业标准,所有主流开源项目使用 Git
企业内部开发GitLab 自建方案,权限控制完善
个人知识管理本地仓库 + 远程同步,安全可靠
DevOps 自动化Git 事件触发 CI/CD,自动测试和部署
微服务架构每个服务独立仓库,子模块管理依赖

扩展阅读


🔗 下一章02 - 安装配置 — 在各平台安装 Git 并完成初始配置