什么是源代码控制?
了解“源代码控制”及其用途。
版本控制
如果你不熟悉版本控制,它解决的是一个简单的问题:你和同事如何跟踪代码库中的变更?
- 互相发送更新后的文件
- 文件变更时通过邮件通知对方
- 在中心位置保存带版本号的压缩包

然而,当项目规模扩大时,你会遇到以下问题:
- 开发者越多,协调所有变更带来的沟通成本就越高。
- 如果多个项目同时在同一个代码库上运行,追踪所有变更将变得复杂。
- 如果多个开发者同时修改同一文件,就需要某种机制来协调这些变更。
版本控制工具就是用来管理这种复杂性的系统。
它是一个记录文件及其状态历史的数据库。就像使用数据库一样,你需要掌握必要的技能才能有效使用,并从中获得最大收益。
我年纪够大,还记得有人抱怨使用版本控制的时代!如今,项目中不使用版本控制几乎已经闻所未闻(尽管仍偶有发生)。
Git 出现之前的生活
在 Git 存在之前,存在一些(可称为)传统的版本控制工具。
传统版本控制
传统的版本控制工具,如 CVS(并发版本系统)和 SVN(Subversion),采用集中式架构。你通过与一个服务器通信来维护源代码的状态。这可能带来几个问题:
- 版本控制数据库可能变得非常庞大
- 历史记录可能变得杂乱无章
- 管理代码的检出操作可能变得复杂且痛苦
在旧时代,当你“检出”源代码时,那只是对中央版本的一个次优副本。
从用户角度看,代码处于两种状态之一:
- 本地更改(“脏”状态)
- 已提交
“已提交”等同于“推送到服务器”。只有当你提交并推送后,你的本地更改才能被他人共享。
Git
相比之下,Git 是一种根本意义上的分布式系统。每个 Git 仓库都是从另一个仓库完整复制而来的。它不是指向服务器的“链接”,也不是其他仓库的“影子副本”。 你可以引用原始仓库,但并非必须如此。所有代码数据库(无论是 Git、CVS 还是 SVN)都被称为 **仓库**。

请记住这一点,因为它会反复出现:
所有 Git 仓库天生平等!
Git 的设计初衷是为了让全球各地的开发者能够离线协作开发 Linux 内核。因此,不存在一个持有“黄金源码”的中央服务器。相反,每个人维护自己的源代码数据库(即自己的仓库),并通过合并、复制和集成与其他仓库协作。
林纳斯·托瓦兹(Git 和 Linux 的创造者)喜欢开玩笑说,他把互联网当成了自己的备份系统。