启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第33天,点击查看活动详情
一个大哥周五面试了两位开发,上来先问了一下版本控制工具的使用,我很好奇,这个大哥意味深长的说,这个东西不好包装啊,于是恍然,开始总结自己的git知识点,还请各位大佬多多指点。
版本控制思想
作为一个开发,都想拥有无头到有的开发能力,不管产品、设计、前端、后端、运维、运营、安全,从头到尾能搞下来,绝对是所有开发眼里的大佬(嘿嘿嘿,我一直这么想),但是实际工作当中并不是这样的,会面临两个问题:
1、一个人做完整个项目实际的项目成本和项目风险都很高,之前接触过一个大佬,年薪过百,当时的我年薪还在8左右,一个人完成整个项目,如果出现人事波动,找人保证项目真的是一个巨大的困难,所以现在的项目大部分是划分好职能,有一个团队开发。
2、就算一个人可以完成这个项目,那么也很难一次性搞定,中间可能需要间断调整,那么这个时候维护代码也就成了一个巨大的问题,所以程序员要有版本控制的思想。
综上所述,一个团队,多人分工,一个周期内完成一个项目,那么这个时候,代码的维护绝对是一个重中之重的点。协作代码的合并,功能模块的迭代都需要一个专业的流程进行管理,所以就有了版本控制思想。
聊版本控制就需要知道版本迭代,就是说一共巨大的功能,我们无法在一天之内把它开发完成,所以,就需要分成小的功能来开发,这种划分可能是独立的功能模块,比如一个聊天系统,把用户模块和聊天模块进行划分,也可能是功能递进的划分,比如,1.0是文字聊天,2.0添加是语音和视频功能,那么每个小的划分就可以看成一个版本,形成版本最直接的好处就是进行代码的回退,比如,首先创建了一个聊天系统,首先完成了1.0版本,基本的通信数据传输,那么2.0想完成群聊和好友功能,那么这个时候加入2.0开发过程当中出现的问题,可以直接从1.0开始,而不必从头再来。所以作为一个开发者,接到一个大型项目的时候,一定要先琢磨好版本的划分,也就是版本迭代思想。
版本控制工具
版本控制工具有很多种,基本上都需要实现下面的功能:
1、代码版本的划分
2、不同开发者代码的合并
3、代码版本的切换
但是,在实现的逻辑上需要分为两种,集中式版本管理和分布式版本管理:
集中式版本管理
这个很好理解,就是基于一台服务器,集中管理所有的代码,每一个代码的开发和使用人只拥有自己的一部分代码,所有的代码合并交个集中的这个服务器去处理,这样的好处是便于管理,尤其是整个团队只有一个版本控制大佬,其他人是小白的情况下,这种管理模式大佬会累一些,但是可以最大程度的保证代码的版本安全,(嘿嘿嘿,经历过代码被覆盖的小伙伴可以留言哈,痛苦不堪呀),当然坏处也很明显就是如果集中的服务器出现问题,那么,就真的是问题了。常用的集中式版本管理工具自然是svn啦。
分布式版本管理
这种思路下,所有开发者都拥有完整的代码,可以进行代码合并,代码管理,有点和上面对比,自然是不担心任何一个终端代码出现问题,因为大家都有,那么坏处也很明显,假如一个小白同学不小心覆盖了代码,其他人同步后都会受到影响,因为小白同学具有同样的代码管理权限。常用的分布式管理工具自然是git啦。
后续
其实编程这个行业对综合能力要求还是很高的,比如一个python工程师,掌握Python是必然的,但是还需要掌握其他基本的开发常识,网络,数据结构,计算机系统,当然版本控制这些也是,所以建议各位想入行或者正在入行的小伙伴千万不要只看开发的代码,综合能力还是很总要的,当然这个只是个人的一些看法,还是请各位大佬们多多指点哈。