From 4917d995824b4a2e2b02172665baa5f6ce2ca075 Mon Sep 17 00:00:00 2001 From: MaoXianxin Date: Wed, 28 Jul 2021 15:26:34 +0800 Subject: [PATCH] =?UTF-8?q?3=E5=88=86=E9=92=9F=E5=B8=A6=E4=BD=A0=E4=BA=86?= =?UTF-8?q?=E8=A7=A3=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E5=B1=95=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\345\261\225\345\216\206\345\217\262.md" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 "Dev_tools/3\345\210\206\351\222\237\345\270\246\344\275\240\344\272\206\350\247\243\347\211\210\346\234\254\346\216\247\345\210\266\347\263\273\347\273\237\347\232\204\345\217\221\345\261\225\345\216\206\345\217\262.md" diff --git "a/Dev_tools/3\345\210\206\351\222\237\345\270\246\344\275\240\344\272\206\350\247\243\347\211\210\346\234\254\346\216\247\345\210\266\347\263\273\347\273\237\347\232\204\345\217\221\345\261\225\345\216\206\345\217\262.md" "b/Dev_tools/3\345\210\206\351\222\237\345\270\246\344\275\240\344\272\206\350\247\243\347\211\210\346\234\254\346\216\247\345\210\266\347\263\273\347\273\237\347\232\204\345\217\221\345\261\225\345\216\206\345\217\262.md" new file mode 100644 index 0000000..9133c02 --- /dev/null +++ "b/Dev_tools/3\345\210\206\351\222\237\345\270\246\344\275\240\344\272\206\350\247\243\347\211\210\346\234\254\346\216\247\345\210\266\347\263\273\347\273\237\347\232\204\345\217\221\345\261\225\345\216\206\345\217\262.md" @@ -0,0 +1,77 @@ +# 3分钟带你了解版本控制系统的发展历史 + +## 关于版本控制 + +什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在CODE CHINA 中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。 + +如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。 + +接下来,我们将要回顾版本控制系统的发展历史。 + +版本控制系统发展可以分为 本地版本控制系统、集中式版本控制系统以及分布式版本控制系统三个阶段。 + +### 本地版本控制系统 + +许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。 + +为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。 + +![](https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210728151519.png) + +其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。 + +### 集中化的版本控制系统 + +接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 `CVS`、`Subversion` 以及 `Perforce` 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。 + +![](https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210728151722.png) + +这种做法带来了许多好处,特别是相较于老式的本地 `VCS` 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。 + +但这么做也有一个显而易见的缺点,那就是是中央服务器的单点故障。 + +- 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作 +- 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 + +本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。 + +### 分布式版本控制系统 + +于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 `Git`、`Mercurial`、`Bazaar` 以及 `Darcs` 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份 + +![](https://maoxianxin1996.oss-accelerate.aliyuncs.com/codechina1/20210728151831.png) + +不仅如此,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。这样一来,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。 + +## Git 的诞生 + +接下来,让我们来看一看 Git 诞生的故事。 + +### Git 诞生的背景 + +同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。 + +Linus 在1991年创建了开源的 Linux,从此,Linux 系统不断发展,已经成为最大的服务器系统软件了。在1991-2002年期间,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码。 + +你也许会想,为什么 Linus 不把 Linux 代码放到版本控制系统里呢?不是有`CVS`、`SVN`这些免费的版本控制系统吗?因为Linus 坚定地反对`CVS`和`SVN`,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比`CVS`、`SVN`好用,但那是付费的,和 Linux 的开源精神不符。 + +### Linus 两周完成 Git + +

到 2002 年,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码,BitKeeper 的东家 BitMover 公司也免费授权 Linux 社区使用这个版本控制系统。后来 BitMover 公司发现社区有人试图破解 BitKeeper 的协议,于是 BitMover 公司收了回 Linux 社区的免费使用权。

+
+ +这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标: + +- 速度 +- 简单的设计 +- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支) +- 完全分布式 +- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量) + +于是,Linus 花了两周时间自己用 `C` 写了一个分布式版本控制系统,这就是 Git!一个月之内,Linux 系统的源码已经由 Git 管理了! + +### Git 的发展壮大 + +自 2005 年诞生以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。Git 迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub ,包括`jQuery`,`PHP`,`Ruby`等等。 + +如果想了解更多 Git 知识,可以来这里: https://codechina.csdn.net/courses/detail/1/l \ No newline at end of file -- GitLab