Git: Git简介与版本控制概念

Git 是世界上最流行的分布式版本控制系统——它让团队协作变得简单高效。

本教程面向零基础学习者,从版本控制概念讲起,直到你能熟练使用Git进行团队协作。

1. 你将学到


2. 什么是版本控制

版本控制(Version Control)是一种记录文件内容变化,以便将来查阅特定版本的系统。

(1) 为什么需要版本控制?

想象你正在写一篇论文:

TEXT 📖 仅展示
论文-v1.doc          # 第一版
论文-v2.doc          # 修改了一些内容
论文-最终版.doc       # 导师说还要改
论文-最终版2.doc      # 又改了一些
论文-打死不改版.doc    # 真的是最后一版了
论文-打死不改版2.doc   # 好吧,还得改...

这种方式的问题:

版本控制系统就是为了解决这些问题而诞生的。


3. 版本控制的演进

(1) 3.1 本地版本控制

最早期的版本控制,在本地保存文件的所有版本。

100%
graph TB
    A[本地数据库<br/>v1, v2, v3] --> B[工作区]

代表工具: RCS(Revision Control System)

缺点: 无法多人协作


(2) 3.2 集中式版本控制

所有版本数据集中存储在一台服务器上,团队成员从服务器获取文件,修改后再提交回去。

100%
graph TB
    S[中央服务器<br/>所有版本]
    S --> A[用户A]
    S --> B[用户B]
    S --> C[用户C]

代表工具: CVS、Subversion(SVN)、Perforce

优点:

缺点:


(3) 3.3 分布式版本控制

每个开发者都拥有完整的版本库(仓库),包括所有历史记录。

100%
graph LR
    A[用户A仓库<br/>完整历史] <--> B[用户B仓库<br/>完整历史]
    B <--> C[用户C仓库<br/>完整历史]
    A <--> C

代表工具: Git、Mercurial、Bazaar

优点:

缺点:


4. Git的诞生

(1) 4.1 Git的由来

2005年,Linux内核开发社区发生了一件大事:

Git的设计目标:

  1. 速度:必须非常快
  2. 简单:设计要简洁优雅
  3. 支持非线性开发:允许成千上万个并行分支
  4. 完全分布式:每个开发者都有完整仓库
  5. 高效处理大型项目:如Linux内核

Linus在2005年4月用大约2周时间完成了Git的初始版本。如今,Git已成为世界上最流行的版本控制系统。

(2) 4.2 Git的设计哲学

Git的设计体现了几个核心思想:

快照而非差异

其他系统(如SVN)存储的是文件之间的差异:

TEXT 📖 仅展示
v1: file.txt (原始文件)
v2: file.txt + diff1 (存储差异)
v3: file.txt + diff1 + diff2 (累积差异)

Git存储的是每次提交的完整快照:

TEXT 📖 仅展示
v1: file.txt的完整快照
v2: file.txt的完整快照
v3: file.txt的完整快照

优点:

几乎所有操作都在本地

只有推送和拉取需要联网。


5. Git的核心概念

(1) 5.1 仓库(Repository)

仓库是Git的核心概念,包含:

100%
graph TB
    subgraph Git仓库
        R[版本库 .git<br/>所有提交历史<br/>所有分支信息]
        S[暂存区 Stage<br/>准备提交的修改]
        W[工作区 Work<br/>实际编辑的文件]
    end
    W -->|git add| S
    S -->|git commit| R

(2) 5.2 提交(Commit)

提交是Git的基本单位,包含:

TEXT 📖 仅展示
commit a1b2c3d4e5f6... (40位哈希)
Author: 张三 <zhangsan@example.com>
Date:   2024年1月1日 10:00:00

    添加用户登录功能

(3) 5.3 分支(Branch)

分支是指向某个提交的可移动指针。Git的分支创建成本极低,只是创建一个41字节的文件(40字节哈希+1字节换行符)。

100%
graph LR
    C1[提交C1] --> C2[提交C2] --> C3[提交C3]
    main[main分支] --> C3
    feature[feature分支] --> C3

6. Git的应用场景

(1) 6.1 个人项目

(2) 6.2 团队协作

(3) 6.3 开源项目

(4) 6.4 持续集成/持续部署(CI/CD)


7. Git与其他版本控制的对比

特性 Git SVN CVS
架构 分布式 集中式 集中式
离线工作 ✅ 完全支持 ❌ 不支持 ❌ 不支持
分支创建 极快(O(1)) 慢(复制目录) 不支持
存储方式 快照 差异 差异
网络依赖 仅推送/拉取 所有操作 所有操作
容灾性 高(每人完整备份) 低(依赖服务器)

▶ 示例:Git基本命令

BASH
# 初始化Git仓库
git init

# 查看仓库状态
git status

# 添加文件到暂存区
git add .

# 提交更改
git commit -m "初始提交"

# 查看提交历史
git log

❓ 常见问题

Q Git和GitHub是什么关系?
A Git是版本控制工具,GitHub是基于Git的代码托管平台。就像Git是"汽车",GitHub是"停车场"——你可以在本地用Git管理代码,然后推送到GitHub进行托管和协作。
Q 为什么要学习Git?
A Git已成为行业标准。95%的开发者使用Git,几乎所有开源项目都用Git管理。不学Git,你将无法参与团队协作和开源贡献。
Q 分布式版本控制会不会占用很多空间?
A Git使用压缩和去重技术,存储效率很高。例如,Linux内核有超过100万次提交,但Git仓库只有约1GB。
Q SVN还在用吗?
A 还在用,但使用率逐年下降。SVN适合管理大型二进制文件(如游戏资源),但新项目建议使用Git。

📖 小节


📝 作业

  1. 基础题:用自己的话解释"分布式版本控制"和"集中式版本控制"的区别,至少列出3点。

  2. 进阶题:调研你身边的项目或公司,了解他们使用什么版本控制工具,为什么选择这个工具?

  3. 挑战题:阅读Linus Torvalds关于Git的原始邮件(搜索"Linus Torvalds Git mailing list"),了解Git诞生的背景和设计理念。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏