《Git学习指南》——第1章 基本概念 1.1分布式版本控制,有何过人之处

简介: 图1.1中所显示的就是一个集中式版本控制系统(例如CVS或Subversion)的典型布局。每个开发者都在他或她自己的计算机上有一个包含所有项目文件的工作目录(即工作区)。当该开发者在本地做了修改之后,他或她就会定期将修改提交给某台中央服务器。

本节书摘来自异步社区《Git学习指南》一书中的第1章,第1.1节,作者: 【德】René Preißel(普莱贝尔) , Bjørn Stachmann(斯拉赫曼)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 基本概念

在本章中,我们将介绍一个分布式版本控制系统的设计思路,以及它与集中式版本控制系统的不同之处。除此之外,我们还将带你了解分布式版本库的具体工作方式,以及为什么我们会说,在Git中创建分支和合并分支不是个大不了的问题。

1.1 分布式版本控制,有何过人之处

在具体探讨分布式版本控制的概念之前,让我们先来快速回顾一下传统的集中式版本控制架构。

图1.1中所显示的就是一个集中式版本控制系统(例如CVS或Subversion)的典型布局。每个开发者都在他或她自己的计算机上有一个包含所有项目文件的工作目录(即工作区)。当该开发者在本地做了修改之后,他或她就会定期将修改提交给某台中央服务器。然后,开发者在执行更新操作的同时也会从该服务器上捡取出其他开发者所做的修改。这台中央服务器上存储着这些文件(即版本库)的当前版本和历史版本。因此,这些被并行开发的分支,以及各种被命名(标记)的版本都将会被集中管理。

screenshot

图1.1 集中式版本控制

而在分布式版本控制系统(见图1.2)中,开发者环境与服务器环境之间是没有分隔的。每一个开发者都同时拥有一个用于当前文件操作的工作区与一个用于存储该项目所有版本、分支以及标签的本地版本库(我们称其为一份克隆)。每个开发者的修改都会被载入成一次次的新版本提交(commit), 首先提交到其本地版本库中。然后,其他开发者就会立即看到新的版本。通过推送(push)和拉回(pull)命令,我们可以将这些修改从一个版本库传送到另一个版本库中。这样一来,从技术上来看,这里所有的版本库在分布式架构上的地位是同等的。因此从理论上来讲,我们不再需要借助服务器,就可以将某一台开发工作机上所做的所有修改直接传送给另一开发工作机。当然在具体实践中,Git中的服务器版本库也扮演了重要的角色,例如以下这些特型版本库。

screenshot

图1.2 分布式版本控制

项目版本库(blessed repository):该版本库主要用于存储由“官方”创建并发行的版本。
共享版本库(shared repository):该版本库主要用于开发团队内人员之间的文件交换。在小型项目中,项目版本库本身就可以胜任这一角色了。但在多点开发的条件下,我们可能就会需要几个这样的专用版本库。
工作流版本库(workflow repository):工作流版本库通常只用于填充那些代表工作流中某种特定进展状态的修改,例如审核通过后的状态等。
派生版本库(fork repository):该版本库主要用于从开发主线分离出某部分内容(例如,分离出那些开发耗时较长,不适合在一个普通发布周期中完成的内容),或者隔离出可能永远不会被包含在主线中的、用于实验的那部分开发进展。
下面,我们再来看看分布式系统相对于集中式的优点有哪些。

高性能:几乎所有的操作都无需进行网络访问,均可直接在本地执行。
高效的工作方式:开发者可通过多个本地分支在不同任务之间进行快速切换。
离线功能:开发者可以在没有服务器连接的情况下执行提交、创建分支、版本标签等操作。之后再将其上传服务器。
灵活的开发进程:我们可以在团队和公司中为其他部门建立专用的版本库,例如为方便与测试人员交流而建的版本库。这样相关修改就很容易发布,因为只是特定版本库上的一次推送。
备份作用:由于每个开发者都持有一份拥有完整历史版本的版本库副本,所以因服务器故障而导致数据丢失的可能性是微乎其微的。
可维护性:对于那些难以对付的重构工作,我们可以在将成功传送给其原始版本库之前,先在该版本库的副本上尝试一下。

相关文章
|
16天前
|
开发工具 git 开发者
Git常用命令大全:让你轻松驾驭版本控制
Git命令速查:`git init`新建仓库,`git clone`克隆,`git add`入暂存区,`git commit -m`提交,`git status`查看状态,`git log`查看历史,`git branch`创建分支,`git checkout`切换,`git merge`合并,`git pull`拉取更新,`git push`推送,`git remote -v`查看远程,`git checkout --`撤销本地修改,`git reset HEAD`取消暂存,`git reset --hard`回退版本。掌握这些,提升代码管理效率!
16 0
|
3月前
|
存储 前端开发 开发工具
前端开发中的Git版本控制:构建可靠的协作和代码管理
前端开发中的Git版本控制:构建可靠的协作和代码管理
48 0
|
3月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
开发工具 git
Git版本控制——分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着可以把工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
32 0
|
1月前
|
存储 关系型数据库 MySQL
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
88 0
|
21天前
|
开发工具 git
Git版本控制工具详解(三)
Git版本控制工具详解
35 0
|
1月前
|
Linux 开发工具 git
Git与GitHub:解锁版本控制的魔法盒子
Git与GitHub:解锁版本控制的魔法盒子
30 1
|
2月前
|
开发工具 git 开发者
Git 的基本概念和使用方式
Git 的基本概念和使用方式
13 0
|
3月前
|
存储 开发工具 git
深入理解Git:版本控制的魔法
深入理解Git:版本控制的魔法
43 0
|
3月前
|
开发工具 git 开发者
从入门到精通:Git版本控制系统完全指南
从入门到精通:Git版本控制系统完全指南
50 1