前言
在周六发现了 Linus 去 Google 演讲的一个视频,当时还发了一条朋友圈:
有兴趣的同学也可以去看看,一点儿也不无聊,在线看 Linus 大佬怼人
https://www.bilibili.com/video/BV1xb411A7ac?from=search&seid=4239535088233137638
朋友圈的评论有几个人问我 女朋友 呢
我又恰好给我女朋友科普过什么是 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):
- GitHub
- Gitee 访问更快
我是三歪,一个想要变强的男人,感谢大家的点赞收藏和转发,下期见。