版本控制:Version Control。是一种记录一个或若干文件内容变化,以便将来查询特定版本修订情况的系统。
有了版本控制,就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态;还可以比较文件的变化细节,查出最后是谁、在什么时间修改了哪个地方;还可以将多人代码进行合并,并且在出现冲突时更好地进行处理。
集中式版本控制系统:
集中式版本控制系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。典型代表是 CVS、SVN。
集中式版本控制系统最显而易见的缺点是中央服务器的单点故障:
- 如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
- 要是中央服务器的磁盘发生故障,就会有丢失数据的风险(客户端提取出来保存在本地只是某些快照数据,不能保证所有的数据都已经有人事先完整提取出来过,所以就会有丢失历史变更记录的风险)。
分布式版本控制系统:
分布式版本控制系统没有中央服务器,每个人的电脑都是一个完整的版本库,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来,这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。典型代表是 Git。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
- 断网的情况下也可以进行开发(因为版本控制是在本地进行的)。
- 如果使用 github 等代码托管中心(充当分布式版本控制系统中的中央服务器,本质上也是一个客户端)进行团队协作,哪怕 github 挂了,每个客户端保存的也都是整个完整的项目。