3.3 代码版本管理

【考点讲解】

大家所熟知的 Windows 7 系统的代码量大约有5000万行代码。当初开发 Windows 7的时候足足成立了23个小组,而每个小组成员大约为40人,所以总人数也接近了1000人。要知道这只是微软Windows团队成员的人数,要说为Windows 7做出过贡献的人更是数不胜数。这么庞大的软件工程,假如没有成熟的代码版本管理工具去维护,试想一下,1000个人都需要修改到同一个文件,这将是一件多么恐怖的事情。
所以代码版本管理工具对于研发团队来说,是十分重要的。目前业界常用的代码版本管理的主流工具有:Git、SVN、CVS等。其中SVN和CVS是集中式版本控制工具,版本库集中存放在中央服务器中,需要联网才能工作,但Git是分布式版本控制工具,每个开发者都有一套本地代码仓库,就算网络中断,对于本地仓库的版本维护也是影响不大的。本地仓库和远程仓库又可通过网络进行版本快照同步,使得代码维护更加安全。Git 也是当今最流行、最优秀的分布式版本控制工具,我们在日常工作中将会频繁与Git 打交道。
在面试过程中,有关代码版本控制的问题问得相对较少,但是并不是说这个考点就不重要,因为大厂对于软件研发的流程更加完善,代码版本控制是必不可少的一环,不仅要确保代码本身不出差错,也要保证合并代码的时候不要合出问题。以笔者的亲身经历,面试大厂时,此类问题还是有一定几率会被问到的,大家复习时主要以了解代码版本控制原理为主即可。另外,因为 Git 在代码版本控制软件中最为流行,所以大家也应该要了解Git的常用操作命令。
有关代码版本控制的考点有:
  • Git 的工作原理
  • Git 的基本操作

【例题示例】

3.4.1. Git的工作原理是什么?

【考点映射】
  • Git 的工作原理
【出现频度】★★★☆
【难度】★★

【参考答案】
Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。它是由 Linux 之父 Linus Torvalds 开发的。大名鼎鼎的 GitHub、GitLab 以及 Gitee 等代码托管网站,都是基于Git 进行构建。
Git 作为一个分布式版本控制系统,不仅有一个中心的服务器控制最新版本代码,而且每个开发者自己还有个本地仓库,所以在开发过程中都是先将代码提交到本地仓库再推送到中心服务器上的,这样的好处就是每个人都依赖于中心服务器来实现交互,但又不会被中心服务器限制,就算中心服务器挂了,也能很容易的找到最新版本的代码,而且我自己的工作依然可以顺利进行,提交到本地仓库,当中心服务器修复之后,再将自己仓库的东西推送到中心服务器中。
Git 主要分为四个组成部分:工作区暂存区本地仓库远程仓库
工作区:当我们执行 git init 之后,就会在项目目录下生成一个.git 文件夹,预示着整个项目被git托管,而此时的整个项目目录包括其子目录,都将成为工作区。
暂存区:暂存区用来保存经 git add [file] 命令处理后的文件快照,标志着某个文件状态已经被追踪。
本地仓库:每一次将暂存区的文件快照提交(git commit)到本地仓库的动作,即形成一次统一的版本,由此可进行本地化的版本管理,并且本地仓库的版本信息也可以和远程仓库进行同步。
远程仓库:即 github 之类的代码托管网站,将本地仓库的版本信息同步到远程仓库之后,将会使得代码的维护变得更加安全,假如本地仓库被搞乱了,还可以从远程仓库拉取代码进行项目还原。
当我们在工作目录中进行文件操作后,要先添加到暂存区,然后再将暂存区中刚添加的文件快照提交到本地仓库,然后再将本地仓库的最新版本文件快照推送到远程仓库。
以下是Git的文件存储的流程图:


3.4.2. 介绍一下 Git 的常用命令

【考点映射】
  • Git 的基本操作
【出现频度】★★★☆
【难度】★★

【参考答案】
查看提交记录
git log  查看过往提交记录
git diff 查看工作区的变动
分支操作
git branch 显示所有本地分支,* 所在的位置,表示当前分支
git branch new_branch 创建新分支
git checkout branch_name 切换分支
git checkout -b branch_name 创建新分支并切换到新分支
git checkout —- file_name 拉取暂存区文件并将其替换成工作区文件
git branch -d branch_name 删除分支
git branch -D branch_name 强行删除分支
git tag tag_name