01 Git 介绍
版本控制系统介绍¶
版本控制系统(VCS)是软件开发中用于管理代码变更历史的工具,帮助团队追踪修改、协作开发和恢复历史版本。 根据架构不同,版本控制系统主要分为 集中式版本控制系统(CVCS) 和 分布式版本控制系统(DVCS)。
集中式版本控制系统(CVCS)¶
定义与工作原理¶
集中式版本控制系统采用客户端-服务器架构,代码和版本历史统一存储在中央服务器上。开发者通过客户端从服务器获取代码(检出),在本地修改后提交回中央服务器。典型代表包括 SVN(Subversion) 和 CVS(Concurrent Versions System)。
- 工作流程:
- 开发者从中央服务器拉取最新代码(
svn checkout)。 - 在本地修改代码。
- 将修改提交到中央服务器(
svn commit)。 -
其他开发者拉取更新以同步(
svn update)。 -
特点:
- 单一版本库:所有版本历史和代码都存储在中央服务器,本地客户端仅保留工作副本,无完整历史记录。
- 网络依赖:提交、查看历史等操作需联网,依赖中央服务器的可用性。
- 集中管理:权限和版本管理由中央服务器控制,适合严格权限控制的环境。
优点¶
- 简单易用:适合小型团队或需要集中管理的项目,管理逻辑直观。
- 统一备份:版本历史集中存储,便于管理和备份。
- 权限控制:中央服务器便于设置访问权限,适合企业内部项目。
缺点¶
- 单点故障:中央服务器宕机或损坏可能导致开发中断或数据丢失。
- 网络依赖:离线状态下无法提交或查看历史记录,网络延迟可能影响效率。
- 分支管理复杂:分支操作需与服务器交互,创建和合并分支较为繁琐,可能引发冲突。
适用场景¶
- 小型团队或企业内部项目。
- 需要严格权限控制和集中管理的场景。
- 项目规模较小,分支管理需求不复杂。
分布式版本控制系统(DVCS)¶
定义与工作原理¶
分布式版本控制系统采用去中心化设计,每个开发者的本地计算机都拥有完整版本库,包括代码和全部历史记录。开发者可以在本地完成提交、分支、合并等操作,仅在需要同步时与远程仓库交互。典型代表是 Git 和 Mercurial。
- 工作流程:
- 初始化本地仓库(
git init)或克隆远程仓库(git clone)。 - 在本地修改代码并提交到本地仓库(
git add .和git commit)。 - 推送本地提交到远程仓库(
git push)或拉取远程更新(git pull)。 -
本地可创建分支、合并代码,无需联网。
-
特点:
- 完整版本库:每个开发者本地存储完整代码和历史记录,独立于远程仓库。
- 离线操作:提交、查看历史、分支管理等操作可在本地完成,无需网络。
- 灵活协作:支持多种工作流(如 Fork、Pull Request),开发者可直接推送或拉取彼此的修改。
优点¶
- 高可靠性:无单点故障,即使远程仓库损坏,任何本地副本都可恢复完整版本库。
- 离线能力:本地操作无需联网,适合分布式团队或网络不稳定环境。
- 分支管理高效:分支创建和合并快速且灵活,适合复杂项目和频繁迭代。
- 协作灵活:支持多仓库同步,适合开源项目和大型团队。
缺点¶
- 学习曲线较高:命令和操作(如 Git 的分支、合并)对初学者较复杂。
- 初始同步数据量大:克隆完整版本库可能需要更多时间和存储空间。
- 保密性较低:每个开发者拥有完整版本库,可能增加代码泄露风险。
适用场景¶
- 开源项目或需要灵活协作的大型团队。
- 频繁分支和合并的复杂项目。
- 离线开发或网络不稳定环境。
集中式与分布式对比¶
| 特性 | 集中式(CVCS) | 分布式(DVCS) |
|---|---|---|
| 版本库存储 | 中央服务器,客户端仅存工作副本 | 每个客户端存完整版本库 |
| 网络依赖 | 需联网操作 | 支持离线操作,仅同步需联网 |
| 单点故障 | 存在,服务器故障影响所有开发者 | 无,任何本地副本可恢复 |
| 分支管理 | 复杂,需服务器交互 | 灵活,本地快速创建和合并 |
| 协作模式 | 集中化,依赖中央服务器 | 去中心化,支持多种工作流 |
| 性能 | 受网络和服务器负载影响 | 本地操作快,负载分散 |
| 适用场景 | 小型团队、集中管理 | 大型团队、开源项目、离线开发 |
实际案例与代码示例¶
集中式(SVN 示例)¶
# 从服务器检出代码
svn checkout https://svn.example.com/repo
# 修改代码后提交
svn commit -m "修改功能 X"
# 更新本地代码
svn update
分布式(Git 示例)¶
# 初始化本地仓库
git init
# 添加文件并提交
git add README.md
git commit -m "初始提交"
# 推送至远程仓库
git remote add origin git@github.com:user/repo.git
git push -u origin main
总结¶
- 集中式版本控制系统适合需要严格控制和简单协作的小型项目,但受限于网络依赖和单点故障风险。
- 分布式版本控制系统(如 Git)因其灵活性、高可靠性和离线能力,成为现代开发的主流,特别适合开源项目和复杂开发场景。
- 选择建议:小型团队或企业内部可选择 SVN 等集中式系统;大型团队、开源项目或需要频繁分支管理的场景推荐 Git。