git看着一篇就够了(2)
git共分成四个部分,上篇介绍了本地仓库
,线上仓库
, 本篇将沿着上一篇的内容继续讲解 分支
及多人协作
。
想要真正理解一个技术,必须知道技术出现的背景和解决的痛点,只有这样我们才能在真正使用这个技术的时候对其有透彻的了解,那么分支解决的问题是什么那 ?
我们应该都听说过一个成语,叫众人拾柴火焰高,说的是越多人做一件事情速度越快,但是真的是这样么 ? 事实却是不是如此 , 假设我们要组装一辆小小的四驱车,这个时候你一个人组装的效率可能要高于好几个小伙伴给你组装的效率,因为你的小伙伴一会把前轮装在后轮上, 一会齿轮装错了,一会又把电源线搭错了,这个时候相信你的心情一定不好,因为明明自己可以做好的事情,非叫一帮人来添乱,我自己组装多好啊。
可以说目前的互联网企业往往面临着这样的尴尬, 明明一个人干可能效率更高,为啥找来一帮人瞎忙活那 ? 这帮人瞎忙活能得到效率的提高么? 其实在初期工程之中,任务量小,维护需求较少的项目一个人做起来确实可能相对轻松一点,但是如果项目日益壮大,维护需求日期增多,这时候我们的项目难道还由一个人去完成么? 不可能的,我们又缺少合适的工具让很多人一起进行开发,所以这个时候急需一种开发模式,和工具来帮我们走出这个低效的泥沼,你瞧 , 模块化和git的分支就出现了。
part1 : 分支
关于模块化的内容在本文暂不展开,如果你还为没有了解该项技术,那么请暂时将其理解为可以及其细致划分工作的一种开发模式,后续会给大家带来部分模块化的讲解。
假设我们现在在一家公司,共同开发一个项目 , 这个项目大概分成 , 首页,登陆注册,列表,详情....
那么我和我的小伙伴分到的模块是一个非常庞大的首页,我们该如何开工那? 我们又如何保证代码的有效性和不相关性那 ?
首先我们先对项目进行一个基本的结构划分
--| project
--| src 开发目录
--| libs
require.js
jquery-3.3.1.js
--| module 模块目录
banner.js A
popup.js A
loader.js B
.....
--| index 首页目录
style.css A|B
index.html
index.js A|B
目录结构确定了,你和你的小伙伴要更新的部分已经被标出来了,文件后的标签则表示是有A,还是B负责,当然还有A,B共同负责的内容,这下可就麻烦了, 为啥那? 因为开发的时候你总要测试把,两个人代码合并在一起的时候,哪些代码更新了,哪些代码覆盖了, 那些代码又改变了 , 开发过程中难免会彼此更改一些代码, 那么这些问题如果让两个人共同维护一份代码讲变得不可调和,那怎么才能更好的完成两人之间的协作那?
我们给出了分支的方案,将分支分成两类,一类是 master
分支 另一类叫做 dev
分支,master分支一直都叫master分支,但是dev分支却很少叫dev分支,原因我们一会说,你需要知道的是,master分支是主要分支,我们发布上线的最终结果就是master分支,dev分支是用于开发测试的,那么master
分支和dev
分支协作的模式是什么样的那 ?
简单来说 dev
分支会原模原样地copy一份master分支,也就是说制造一份副本,然后由开发人员尽情地折腾,整烫好了将自己的开发分支交由测试,测试没有问题了,那么再合并回主分支 , 其过程大概如下图:
每一次版本提交都会产生一个新的分支出现
在这里我们初步建立了一个版本,但是随着越来越多的人接入,我们的版本不能变得非常混乱要有序的进行,所以开发人员每个人都拿到了一个当前版本的项目自己做着自己的事情。
通常我们会以区别的方式命名 dev 导致dev这个东西可能有n条同时在向前
这时表示有三个开发人员同时对代码进行开发,那么三个开发人员分配到的工作应该是彼此不相干的, 所以他们都可以开心的做自己的事情让进度持续向前,这个进度是dev1,dev2,dev3其实都无所谓,主要是所有人的进度都向前推进了,他们的协作是成功的,进度因为更多人的参与加快了,那么如此这个工具就成功了。
tip : 我们的分支名命名方式有很多 通常是以 业务名称+开发者姓名这样的模式进行命名的确保自己进度的独立性和高度可识别性。
当然像这样开发完了一次就结束了么,并没有,我们会继续对dev分支的代码进行合并 merge
,确保代码被和n为1,那么这个时候我们就可以将项目的进度向前推一步了,也就是master分支发布一版更新。
我们通常在开发完毕之后会删除掉多余的分支。
好了说一下分支的操作指令集 :
- 创建并切换分支
checkout
切换分支
-b
是branch 的简写,意味创建分支。
$ git checkout -b index-huaizhi
提示内容:
Switched to a new branch 'index-huaizhi'
- 查看分支是否成功切换
git branch
* index-huaizhi
master
- 然后
add
commit
提交版本,这个时候我们就实现了上述的 :
表示我们的版本进行了一次更新。
- 我们将
master
分支版本向前推进一个版本。 需要用到merge
,该指令表示将指定分支的代码合并到当前分支上
我们将代码切换回master分支,并且将index-huaizhi分支上的内容合并到master分支,那么我们master分支就继续向前走了一步。
git checkout master
git merge index-huaizhi
好了本章节到这里也基本结束了本章阐述了多人协作的使用方式及协作方法,同时也讲解了分支的基本操作,当然我们对于分支的操作还有很多,这些API需要大家自己去探索。