大部分面试都会问到的内容,就是在代码管理上,是使用git还是svn?这两个东西倒是都用过,但都没有去梳理过,今天以这个问题梳理一下。



1.
git和svn都是代码管理工具,那先搞明白一件事,代码管理是啥?为啥要管?

1)什么是代码?

程序员写出的不都是代码吗?不,也有可能是垃圾~哈哈,开个玩笑~代码大家天天写,它就像你生产出来的货物一样,久而久之,货物就会越来越多,总不能这一堆,那一放的,不然想找的时候可就头疼了。就像图书馆会把书籍分门别类的管理起来一样,有条理的管理代码,可以减少工作量


2)代码管理?

说的直白点是代码管理,专业点说叫版本控制。那为什么要版本控制呢?比如咱们现在手机里的APP,隔三差五就要更新个版本,JDK到现在都更新到十几了,每次更新的时候,APP一提示,咱们一同意,就开始下载新的安装包了,你就不好奇,每次更新完之后,功能变多了、少了、不同了,背后到底做了什么呢?

比如一个登录功能:

V1.0版本,是用户名+密码登录

V2.0版本,是邮箱+密码登录

V3.0版本,是手机号+验证码登录

V4.0版本,是微信这样的第三方登录

V5.0版本,是扫脸登录

每次版本一变化,登录功能就变了,如果代码是你写的,你看啊,你要把新的功能替换掉老的功能,你可以重新写一个接口、一个实现类或者就简单一个方法,新的能用,老的也不删除。这样的事情干的多了,总会有记不住的时候,不能每次有什么问题,都去找写代码的人,或者看源码的注释吧?每次代码更新都更新了什么内容?代码有什么变化?跟以前的代码有没有冲突?更新完之后项目运行出错了咋办?想回到原来的功能怎么办?这些问题,以前只能由人来解决,费时费力不讨好的工作谁都不愿意干。那怎么不让软件来管理这些代码呢?让软件来管理版本呢?

一个软件,替代人工,完成代码整合、更新记录、冲突校验等重复的体力劳动,而且错误率低,这次是编程师该干的事:能用程序解决的事,绝不动手。




2.

最开始用什么软件去做版本管理,我没找到资料,我用过的,也是现在公司大多使用的,就是svn和git,那就来简单说说:

1)关于svn

菜鸟svn教程

https://www.runoob.com/svn/svn-tutorial.html

2)关于git

菜鸟git教程

https://www.runoob.com/git/git-tutorial.html

3)网上看的不错的文章,博主的签名是我以前最喜欢用的!

git和svn的区别

https://www.cnblogs.com/Sungeek/p/9152223.html




3.
总结一下,以前记得有个例子是这样说的:

svn是中央集权,皇帝死了,天下大乱,非正统不可登基

git是藩王割据,皇帝死了,天下安然无恙,再来个王爷称帝就行

svn适合各干各的,彼此之间的功能尽量不要影响

git适合协作,几个人开发一个功能也没问题


还有就是我喜欢用git,以前用svn,一不留神忘了更新,修改错误真的心烦。。。



大家有什么关于面试想了解的内容,可以在文末留言~