学习 Git 之前 我们需要理解 Git 是一个分布式版本控制系统 这句话,什么是 版本控制系统,什么又是 分布式版本控制系统。
版本控制
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
———— 百度百科
版本控制系统的核心:版本控制、主动提交、中央仓库
版本控制
简单来说,版本控制就是保存文件的历史修改记录, 使我们能够方便的撤销之前对文件的修改操作,或者能够很方便的退回到历史的某个阶段。
比如 我们使用的各种 文本编辑器都有撤销的功能,就像简书或者各种 IDE,使用 Ctrl + Z 就能撤销刚才的操作,退回到上一个文档的状态。这是因为文本编辑器自动帮你保存了之前的内容,当撤销的时候,它会把内容退回到上一个状态。
主动提交
版本控制系统(Version Control System - VCS) 和 普通的文本编辑器的 撤销功能相比,程序的开发周期非常的长,我们甚至会查看几年前的代码修改情况,如果依然采用 每次修改自动保存的形式保存历史记录,那么这个记录很非常频繁,并且冗余记录非常多,这样查找想要的历史记录就非常困难。所以 VCS 采用了 主动提交改动 的机制,这样每当我们想把 当前版本作为一个历史记录,就主动 commit 提交,把该版本存储到历史版本中,当我们需要回退的时候,就能从 VCS 历史日志中找到它。
中央仓库
当多人共同进行开发的时候,就需要有一个中央仓库作为代码的存储中心: 开发者将代码上传到中央仓库,其他所有的人也能看到或者下载别人上传的代码。
中央式版本控制系统 和 分布式版本控制系统
最初的版本控制系统 是 中央式版本控制系统(Centralized VCS),Git 是 分布式的 版本控制系统(Distributed VCS)。
中央式版本控制系统

中央式版本控制系统是将 版本库是集中存放在中央服务器。
多人开发的时候,首先从中央仓库下载到初始的代码,然后多人并行开发;
开发过程中每个人都负责一部分功能,完成后将新代码提交到中央仓库;
当有人提交代码的时候,其他人就可以将这些新代码同步到自己的机器上,保持自己本地的代码式最新的。
这是中央式 VCS 最基本的工作流程,其实开发过程中并没有这么简单,会出现代码冲突,历史版本回退等问题。
分布式版本控制系统

分布式 和 中央式 的 区别在于,分布式 VCS 除了中央仓库之外,本地还有一个自己的仓库:开发者的电脑上都有自己的本地仓库,这个仓库包含了所有的历史版本,也就是说,每个人在自己的电脑上就可以提交代码,查看历史,不需要和 中央仓库交互,只需要和本地仓库交互。
中央式 VCS 的中央仓库主要是 保存版本历史 和 同步团队代码;分布式 VCS 将 保存版本历史的工作 放到了 开发者自己的 本地仓库中,中央仓库的主要任务变成了同步团队代码,当然它依然能保存历史版本。
多人开发时,主程序员将 项目代码提交到本地仓库;
然后再服务器上创建一个中央仓库,并 将本地的代码推送到服务器的中央仓库;
其他开发者把中央仓库的所有内容克隆到本地,拥有了自己的本地仓库,并行开发;
开发者再开发过程中,将自己每次的开发功能完成 提交到本地仓库,开发完成后 将所有代码 从本地仓库 推送到中央仓库;
其他开发者 可以把新的提交同步到自己的电脑上,把它们和自己本地的代码合并。
优点
大多数操作再本地,无需网络就可以提交代码,查看历史版本,速度快;
在本地提交代码可以将每次提交细分,不用一次提交所有代码,这样出现问题的时候,可以方便我们退回一小步,有更多的历史版本。
缺点
因为有个本地仓库,每次记录了历史版本,所以比中央式 更占 存储空间。
网友评论