初识 Git(1)


本系列文章内容参考自《Pro Git》一书(强烈推荐)

该书已被翻译成多种语言,这里有简体中文版的阅读以及PDF免费下载:传送门

本文作为开篇,从版本控制的背景知识开始,先介绍一些基础内容


(一)关于版本控制系统 version control system(VCS)

什么是“版本控制系统”?版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

你可以对任何类型的文件进行版本控制。举个例子:

如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本。

采用版本控制系统,你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,

你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

就算你乱来一气把整个项目中的文件改的改删的删,你也可以轻松地恢复到原先的样子。


1.1 本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 

有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

其中最流行的是RCS(Revision Control System),它是现存的最古老的UNIX应用程序之一。

它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。



1.2 集中化的版本控制系统

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?

 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 

这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,

协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。


这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。

 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。

 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——

包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 

本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。


1.3 分布式版本控制系统

于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。

在这类系统(如 Git、Mercurial、Bazaar 以及 Darcs 等)中,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 

这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 

因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。


更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。

 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值