Git版本控制工具详解
邂逅版本控制工具
认识版本控制 (版本控制)
- 什么是版本控制?
- 版本控制的英文是Version control;
- 是维护工程蓝图的标准做法, 能追踪工程蓝图从诞生一直到定案的过程;
- 版本控制也是一种软件工程技巧, 借此能在软件开发的过程中, 确保由不同人所编辑的同一程序文件都得到同步;
- 简单来说, 版本控制在软件开发中, 可以帮助程序员进行代码的跟踪, 维护, 控制等等一系列的操作.
版本控制的功能
- 对于我们日常开发, 我们常常面临如下一些问题, 通过版本控制可以很好的解决:
- 不同版本的存储管理:
- 一个项目会不断进行版本的迭代, 来修复之前的一些问题, 增加新的功能, 需求, 甚至包括项目的重构
- 如果我们通过手动来维护一系列的项目备份, 简直是一场噩梦;
- 重大版本的备份维护:
- 对于很多重大的版本, 我们会进行备份管理;
- 恢复之前的项目版本:
- 当我们开发过程中发生一些严重的问题, 想要恢复之前的操作或者回到之前的版本;
- 记录项目的点点滴滴:
- 如果我们每一个功能的修改, bug的修复, 新的需求更改都需要记录下来, 版本控制可以很好的解决;
- 多人开发的代码合并:
- 项目中通常都是多人开发, 将多人代码进行合并, 并且在出现冲突时更好的处理
版本控制的历史
- 版本控制的史前时代 (没有版本控制) :
- 人们通常通过文件备份的方式来进行管理, 再通过diff命令来对比两个文件的差异;
- CVS (Concurrent Versions System)
- 第一个被大规模使用的版本控制工具, 诞生于 1985 年;
- 由荷兰阿姆斯特丹VU大学的Dick Grune教授实现的, 也算是SVN的前身 (SVN的出现就是为了取代CVS的)
- SVN (Subversion)
- 因其命令行工具名为svn因此通常被简称为SVN;
- SVN由CollabNet公司于2000年资助并发起开发, 目的是取代CVS, 对CVS进行了很多的优化;
- SVN和CVS一样, 也属于集中式版本控制工具;
- SVN再早期公司开发中使用率非常高, 但是目前已经被Git取代;
- Git (Linus的作品)
- 早期的时候, Linux社区使用的是BitKeeper来进行版本的控制
- 但是因为一些原因, BitKeeper想要收回对linux社区的免费授权
- 于是Linus用了大概一周的事件, 开发了Git用来取代BitKeeper;
- Linus完成了Git的核心设计, 在之后Linus功成身退, 将Git交由另外一个Git的主要贡献者Junio C Hamano 来维护
集中式和分布式区别
集中式版本控制
- CVS和SVN都是属于集中式版本控制系统 (Centralized Version Control Systems, 简称CVCS)
- 它们的主要特点是单一的集中管理的服务器, 保存所有的文件的修订版本
- 协同开发人员通过客户端连接到这台服务器, 取出最新的文件或者提交更新.
- 这个做法带来了许多好处, 特别是相较于老式的本地管理来说, 每个人都可以在一定程度上看到项目中的其他人正在做什么?
- 但是集中式版本控制也有一个核心的问题: 中央服务器不能出现故障:
- 如果宕机, 那么在宕机期间, 谁都无法提交更新, 也就无法协同工作.
- 如果中心数据库所在的磁盘发生损坏, 又没有做恰当备份, 毫无疑问你将丢失所有数据
分布式版本控制
- Git是属于分布式版本控制系统 (Distributed Version Control System), 简称 (DVCS)
- 客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来, 包括完整的历史记录
- 这么依赖, 任何一处协同工作用的服务器发生故障, 事后都可以用任何一个镜像出来的本地仓库恢复;
- 因为每一次的克隆操作, 实际上都是依次对代码仓库的完整备份
- 目前在公司开发中我们都是使用Git来管理项目的, 所以接下来我们会重点学习Git的各种用法