Hi!本节笔记主要介绍VCS版本控制系统在代码编写过程中的应用。相信大家在代码编写过程中都会遇到下面的一些问题:
- 突然要改一个功能,写完代码后发现运行不起来,需要回退到上一个版本
- 几个人共同编写一个项目,难以做到项目文件同步
- 撤销操作有很大限制:只能撤销编辑器启动以来的历史,不能一键撤回到一个时间点
相信这些痛点问题很多同学都经历过,同样,很多前辈在编写代码的过程中也会体验到这种不方便。因此,版本管理系统(VCS)应运而生。它通过对文件树保存历史来解决上面的痛点。VCS系统最基本的操作是:保存版本、切换版本、合并版本。那么,上面所述的痛点问题是如何通过VCS工具解决的呢?我们通过几个场景来探究。
版本回退
当我们在编辑单文件程序时,如果想做到版本回退,最简单和笨拙的方法是不断按撤销键,直到回退到我们所需要的版本。但是这样做有几个问题。一个是撤销键的粒度太小了,它记录了你所按下的每一个键,输入的每一个词汇,很适合编辑时的撤销,不适合版本控制的回退。另一个就是撤销键受到编辑器启动时间的限制,它不能撤销上一个编辑器所编辑的历史。还有一种方法,就是在想要回退的文件上不断创建其副本,当想回退到某一版本时直接覆盖到该副本即可。这种版本的粒度较撤销键大,同时受到程序员的手动控制。实际上,VCS系统就是这种实现原理。它通过在创建版本时保存当前文件树的快照,来实现我们版本回退的目标。
团队项目同步
当很多人同时编辑一个项目时,如何解决文件同步和文件冲突问题?朴素的想法是,编辑完项目后手动将文件树的副本发送给其他人,其他人分别手动合并文件树并处理冲突。这种方法效率不高。而VCS系统则帮助我们自动化了这一步骤。在多人编辑中,VCS系统以中心化服务器的方式部署,每个人本地的VCS版本都连接着服务器。当有一个人做出了版本更改后,将版本推送到服务器。其他人将服务器上的版本下载下来,由VCS系统自动尝试合并。如果合并失败则需要程序员来手动处理冲突。现在的VCS系统通常通过每个人在不同的分支上工作来尽量减少合并冲突。