#什么是 Git?
Git 是一个 分布式版本控制系统(Distributed Version Control System,DVCS)——它记录项目文件的修改历史,追踪谁在何时改了什么、为什么改,并允许随时回溯、比较或恢复任意版本。

#Git 的诞生历史
Git 的故事始于 2005 年 Linux 内核开发社区的一次危机。
Linux 内核规模庞大,早期版本管理依赖补丁和邮件列表,效率低下。2002 年,Linus Torvalds 决定采用 BitKeeper——一个商业分布式版本控制系统,显著改善了开发和合并流程。

但 BitKeeper 是闭源软件。2005 年,社区成员尝试逆向工程其协议,BitKeeper 公司随即撤销了免费许可。当时 CVS、Subversion 等开源工具无法满足 Linux 内核的性能和灵活性需求。
Linus Torvalds 花了两周写出了 Git 的初始版本。2005 年 4 月,Git 接管了 Linux 内核的版本管理。

#Git 的设计理念
快照,而非差异
早期版本控制系统存储”文件的变更差异”(delta)。Git 则保存整个项目在那一刻的 快照(snapshot)。没变化的文件不重复存储,用指针引用之前版本。这让历史检索极为高效——想看某次提交的完整状态,直接定位到那次快照,无需从初始版本逐个应用差异。


数据完整性:用哈希值作为身份证
Git 中每个对象(文件、提交、树)都通过 SHA-1 哈希算法生成唯一的 40 位字符串。这个哈希值既是标识符也是校验码——内容被篡改,哈希值就变,Git 立刻能察觉。代码审查时对比哈希就知道两个版本是否完全一致。

分支是轻量级的一等公民
创建分支的成本极低——本质是创建一个指向某次提交的指针。这让”每个功能开一个分支、做完再合并”成为日常,而不是沉重操作。花几秒建 branch,随意提交实验,完成后合并回主线,删掉 feature 分支。

三个区域:工作区、暂存区、仓库
Git 引入了一个独特的 暂存区(staging area / index)。文件改动不会直接进入历史,而是先经过”候场区”,你可以精细选择”这次提交包含哪些改动”,而不是一股脑全交上去。

分布式:每个人都有完整历史
集中式版本控制(如 SVN)依赖一台中央服务器,断网就无法工作。Git 是分布式的——每个人的本地机器都保存着仓库的完整历史。在高铁或飞机上没网时,正常 commit、看 log、切分支做实验,落地联网后一条 git push 全部同步上去。服务器只是另一个节点,不是唯一权威。

#Git 与其他版本控制系统的区别
| Git | SVN / CVS | |
|---|---|---|
| 架构 | 分布式,每人持有完整历史 | 集中式,依赖中央服务器 |
| 离线工作 | 完全支持 | 几乎不可能 |
| 分支成本 | 极低(轻量指针) | 高 |
| 历史存储 | 快照模型 | 差异记录 |
| 数据完整性 | SHA 哈希校验 | 有限 |
| 生态系统 | GitHub、GitLab,极其活跃 | 逐渐式微 |
集中式系统只有一个中央仓库,检出副本到本地,修改完必须连服务器才能提交。分支操作成本高、离线没法工作,服务器宕机整个团队停滞。SVN 处理二进制文件相对友好,但灵活性和协作效率远不如 Git。
