git相关概念
目录
1、版本控制
本质:一种系统;
作用:记录一个或多个文件的内容变化;
目的:查阅特定版本的修订情况;
适用文件类型:任何类型(如图片、文档、代码等)。
2、版本控制系统发展历史
本地版本控制系统→集中化版本控制系统→分布式版本控制系统
(1)本地版本控制系统(VCS)
基本原理:依托数据库来记录文件的历次更新差异;
优点:
a)本地开发工作效率更高,更不容犯错;
缺点:
a)无法让不同系统的开发者协同工作;
b)整个项目的历史记录保存在单一位置,存在丢失风险;
典型系统:RCS;
RCS原理:每次修改上传新文件后生成一个补丁,该补丁描述了文件修订前后的具体变化,多个补丁会合成一个补丁集保存在本地硬盘上。
(2)集中化版本控制系统(CVCS)
基本原理:在本地版本控制系统的基础上增设一个单一的集中管理的中央服务器,保存所有文件的修订版本;
优点:
a)不同系统的开发者可通过客户端连接到中央服务器,下载最新文件或者提交更新;
b)开发者可以借助中央服务器看到其他人的开发内容和进度;
c)管理员可借助中央服务器调配各开发者的权限;
缺点:
a)中央服务器一旦故障则修复期间无法协同工作;
b)整个项目的历史记录保存在单一位置,存在丢失风险;
典型系统:CVS、Subversion、Perforce。
(3)布式版本控制系统(DVCS)
基本原理:客户端不只是提取/提交最新的文件快照,而是将整个文件仓库完整地镜像提取/提交,包括所有的历史记录;
优点:
a)不同系统的开发者可通过客户端连接到协同服务器,下载最新文件或者提交更新;
b)开发者可以借助协同服务器看到其他人的开发内容和进度;
c)管理员可借助协同服务器调配各开发者的权限;
d)当某个协同服务器故障时,事后可以用任意一个镜像过的本地仓库恢复所有文件及其记录;
e)每一次的克隆操作都是一次对文件仓库的完整备份;
g)部分该类系统可指定与其他若干不同的远程代码仓库进行交互,其作用是在同一个项目中,使得不同工作小组的开发者能够进行相互协作;
缺点:
笔者学习中,暂时不知,欢迎评论区讨论;
典型系统:git、Mercurial、Bazaar、Darcs。
3、git的前世今生
(1)1991年,Linus创建开源Linux;
(2)1991-2002年期间, Linus 本人以手工方式合并世界各地的志愿者通过 diff 的方式发来的源代码文件(因Linux坚定的开源精神,所以坚决反对使用收费的集中式版本控制系统,免费的系统也因为速度慢和需要联网而被Linux拒之门外);
(3)2002年,代码库过大,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码;(Linux 社区得到了BitMover 公司的免费授权);
(4)2005年,BitMover 公司发现社区有人试图破解BitKeeper的协议,免费使用权被回收;
(5)2005年,Linux 开源社区吸取使用BitKeeper 时的经验教训,仅用两周时间就使用C创造了一个分布式版本控制系统git;
(6)2008年,GitHub 网站正式上线,为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括jQuery
,PHP
,Ruby
等等。