前言
在周六发现了Linus去Google演讲的一个视频,当时还发了一条朋友圈:
有兴趣的同学也可以去看看,一点儿也不无聊,在线看Linus大佬怼人
朋友圈的评论有几个人问我女朋友呢
我又恰好给我女朋友科普过什么是Git,所以这篇文章就有了。
Git介绍
Git是干啥用的?它是一个版本控制软件。
Git这个玩意三歪曾经还给女朋友给科普过(三歪会经常给女朋友说点技术的东西,我也不知道她到底听懂了没有,反正她每次都说好像有点懂了)。
当时情况是这样的,某一天她跟三歪说:我做的Excel还没保存,电脑蓝屏死机了,东西全丢了。
于是三歪说:这...我也没怎么用过Excel这类的软件,要不看看你用的WPS或者Office?有没有相关的备份功能或者说是自动保存?
三歪顺手找了一下WPS是有备份(自动保存)功能的,时间什么的要自己定义一下。
三歪还补了一句:这种情况要是在程序员的手上感觉发生的概率会低一点,程序员习惯会按ctrl+s
。甚至有的时候,看着看着网页还会按ctrl+s
。不过像我们写代码的工具(IDEA)都不用自己手动保存了....
过了一会,她说蓝屏之前做的东西找不回来了,没设置自动保存。
三歪又感叹一句:我们写代码还有版本控制的软件,在这个过程中会记录每次修改的内容,谁改了什么东西。谁改错了,谁要背锅,一个都不能跑!
女朋友听着三歪一顿乱吹,貌似也有点感兴趣:“版本控制是什么东西?这么厉害的吗?会计就经常要背锅”
三歪:“其实也没啥,就是我们一般写代码往往都是多人协作的。你们会计可能是每个人负责一张表(Excel),然后把已完成好的表传给下一个人。而写代码的不一样,我们都是在同一个项目里边编写的,不会单独等着某个人做完了,其他的人再开始动手”
女朋友:“嗯?然后呢”
三歪:“你可以理解成,我们多个人会在同一个目录下编写代码,里边可能会做更改或者添加文件的操作。项目组里的所有人都可以对这个目录修改,改完了我们会提交,然后发布上线系统。”
女朋友:“啥?你是不是偏题了?这跟发布上线系统有啥关系?”
三歪:“哦,我还是举个例子吧。就比如我们写论文的时候可能要对论文不断修改,我们的修改是基于原有的基础上改的”
三歪继续补充:”因为我们怕在原来的基础改错了东西,没法恢复,所以,我们可能会有多个「毕业论文」的文件。而我们写代码的时候本身就是「多人协作」的,修改是无法避免的,我们不希望有多个文件的产生,又希望能够记录每次更改的内容。“
三歪:”更改的内容指的就是:基于原有的基础上更改了什么,以及提交者是谁。这样子,我们就没法甩锅了。说白了就是,我们能知道的文件被改了什么,以及谁改了“。
三歪:“到这里,有问题吗?”
女朋友:“嗯,没问题,你继续”
三歪:“「每一次的修改」我们称为一个版本,它能够实现版本与版本之间的来回穿梭。打个比方,我有篇文章写了一周,这期间有10个版本,我能随意回到我想要的版本。所以它叫做版本控制软件”
女朋友:“我大致听懂了,大概就是每一次修改都会被记录下来,然后你们就可以知道每一次版本修改了什么,是谁改的,如果做错了,可以通过这个软件回到想要的版本”
三歪:“嗯,就是这个意思”
女朋友:“那我想问个问题,你一直提到的「多人协作」是在同一个目录下对文件修改的,然后可以看到彼此改了什么。那你是在你的电脑上改,你的同事是在他的电脑上改的,你们是怎么看到彼此改了什么?这现在有这么厉害的东西了吗?“
三歪:”哦~你的意思大概就是:我们又不联网,怎么知道对方改了什么,是这个意思吧?“
女朋友:“嗯,是的”
三歪:“你的理解是没错的,我们之间不联网,是没办法知道对方改了什么的。我漏了一点没说,我们在改到一定程度下(比如说这个功能我们做完了、也可能做得差不多了),我们会把当前版本提交到远程仓库上”
三歪继续补充:“可以发现的是,提交到远程仓库后,即便我们电脑坏了,我们可以从远程仓库再把这份数据拉取下来。”
女朋友:“所以呢?远程仓库到我这听起来就是一个备份的功能吧?你们怎么知道对方改了什么?”
三歪:“是这样的,我们从远程仓库拉取代码的时候除了会把有变动的代码同步到自己的电脑上,还会把所有修改的记录也同步到自己的电脑上。所以说,我们会知道彼此修改的内容。”
女朋友:”听着很有用啊,我平时用的word和excel可以用这个软件吗?即便我电脑坏了,我还可以去『远程仓库』拿到上一次我提交的数据,并且还有你所说的『版本控制』功能。又能备份,又能知道每次修改了什么,很好用啊!“
三歪:”很可惜,像你们那种工作场景,可能用不上,也可以说不太适合用“
女朋友:”为什么?“
三歪:”之前我也想要用定时任务+GitHub
的方式去保存我在本地写的文章,发出来之后,被一顿喷。GitHub
你可以简单理解为就是那个远程仓库,定时任务我就是让它隔一段时间就保存一次“
女朋友:”我听明白了,你想要的是备份功能,对吧?为什么被喷的呢?“
三歪:”他们说我瞎整,这每隔一段时间就提交到GitHub,网络开销可多大啊。然后给我列出一系列的产品,比如说:「坚果云」「Dropbox」「OneDrive」等等“
女朋友:”那你怎么不用?“
三歪:”我哪知道啊,有信息差的呢。反正当时觉得自己写个定时任务
实现了,就没多想了。“
女朋友:”那你是真的菜“
三歪:”哦“
三歪:”除了上面说的自动同步,你们的word、excel在用我们的工具也没法查到历史的版本记录“
女朋友:”为啥?你不是说你们写代码都可以的吗?为什么word和excel就没法查?“
三歪:”我们写代码的文件类型都是属于文本文件,而你的word、excel本质上属于二进制文件,很难去比对每次修改的差异,所以不支持“
女朋友:”那听你这样说,在我的场景里这个「版本控制软件」没啥用啊,它不能记录像Word、Excel这种文件每次版本的差异,要想用它做备份,还不如现有的云产品。“
三歪:”嗯,是的。其实现在云产品也能提供版本控制的功能了,你用它们就足够了。还有一点很重要的是,它有学习成本,可不是每个人都会用的。“
女朋友:”听你说了这么多,好像云产品就很行啊,为啥你们还要「偏执」去用你说的那东西?“
三歪:“主要是我们写代码时遇到的问题会更多,我们用的「版本控制软件」会更加灵活,它支持的功能会更多。”
女朋友:“对了,你都说了这么久了,你们用的那个软件叫啥啊?”
三歪:“Git”
三歪瞎扯
其实本来想着直接讲一下在工作中常用到的Git命令,但发现不太好写(琢磨了很久
看三歪文章的人可能很多都是大学生,对Git本身了解可能就不太清楚,直接上Git的命令可能看不太懂,所以就分开了两篇。
下一篇讲一下三歪在工作中使用Git的糗事以及工作中是怎么用Git的。
各类知识点总结
下面的文章都有对应的原创精美PDF,在持续更新中,可以来找我催更~
- 92页的Mybatis
- 129页的多线程
- 141页的Servlet
- 158页的JSP
- 76页的集合
- 64页的JDBC
- 105页的数据结构和算法
- 142页的Spring
- 58页的过滤器和监听器
- 30页的HTTP
- 42页的SpringMVC
- Hibernate
- AJAX
- Redis
- ......
涵盖Java后端所有知识点的开源项目(已有8K+ star):
我是三歪,一个想要变强的男人,感谢大家的点赞收藏和转发,下期见。