前言

在周六发现了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的。

涵盖Java后端所有知识点的开源项目(已有8K+ star):

我是三歪,一个想要变强的男人,感谢大家的点赞收藏和转发,下期见。

给女朋友讲解什么是Git的更多相关文章

  1. 给女朋友讲解什么是Optional【JDK 8特性】

    前言 只有光头才能变强 前两天带女朋友去图书馆了,随手就给她来了一本<与孩子一起学编程>的书,于是今天就给女朋友讲解一下什么是Optional类. 至于她能不能看懂,那肯定是看不懂的.(学 ...

  2. 过来人告诉你,去工作前最好还是学学Git

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 之前遇到过很多同学私信问我:「三歪,我马上要实习 ...

  3. Git 系列(二):初步了解 Git

    在这个系列的介绍篇中,我们学习到了谁应该使用 Git,以及 Git 是用来做什么的.今天,我们将学习如何克隆公共 Git 仓库,以及如何提取出独立的文件而不用克隆整个仓库. 由于 Git 如此流行,因 ...

  4. 基于Git项目管理客户端SourceTree的免注册安装及远程连接方法

    作为程序员,不可避免的要在github上查询代码,而在企业项目中,为了使得项目好管理需要使用项目管理客户端,所以接下来详细讲解一下基于git的sourceTree在windows系统下的安装及与Git ...

  5. git 的 origin 的含义

    我们从progit 一书中可以看到: 远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样. 同时“master”是当你运行git init时默认 ...

  6. 【原理、命令】Git基本原理、与Svn的区别、命令

    一.Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程:Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote ...

  7. Git的原理简介和常用命令

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

  8. Git的使用 -- 用git玩翻github,结尾有惊喜!有惊喜!有惊喜!林妙妙看了说:牛呲呼啦带闪电 (三)(超详解)

    简介 上一篇主要讲解的是Git安装及配置,这一篇就详细的从无到有的来用Git玩翻github. 一.什么是Github Github是全球最大的社交编程及代码托管网站(https://github.c ...

  9. git基本原理

    git基本原理 一.总结 一句话总结:把原理那张图图背下来 1.git中的四大区,除了远程仓库和本地仓库,剩下两个是什么? 解答:工作区和暂存区. 2.git中的四大区(例如远程仓库和本地仓库),他们 ...

随机推荐

  1. webpack配置篇

    开发环境(development)和生产环境(production)的构建目标差异很大.在开发环境中,我们需要具有强大的.具有实时重新加载(live reloading)或热模块替换(hot modu ...

  2. git pull 部分文件无法获取

    今天发现git pull origin master 的时候部分文件无法获取,然后学到了一个新方法: git fetch git checkout origin/master -- path/to/f ...

  3. windows下node配置npm全局路径(踩坑)

    事情的起因是:Koa要求v7.6.0以上的nodejs. 但是window环境下升级node不容易,试过npm install -g n 和n stable等命令无效,而网上推荐的nvm并不支持win ...

  4. 4.1Go if-else

    1. Go if-else Golang程序的流程控制决定程序如何执行,主要有三大流程控制,顺序控制.分支控制.循环控制. 条件语句需要定义一个或多个条件,并且对条件测试的true或false来决定是 ...

  5. python3.x 基础八:socket网络编程

    Socket socket就是一直以来说的“套接字”,用于描述:ip:端口,是通信链的句柄,客户端通过这个句柄进行请求和响应 普通文件的操作顺序:打开-读写-关闭,针对的是文件 socket是特殊的文 ...

  6. MVC4.0 上传文件

    Views/Import/ImportExcel.cshtml @{ Layout = null;} <!DOCTYPE html> <html><head> &l ...

  7. 都说变量有七八种,到底谁是 Java 的亲儿子

    网上罗列了很多关于变量的理解,良莠不齐,不知道哪些是对的,哪些是错的,所以笔者就这些博客和自己的理解写出这篇文章,如果有不对的地方,希望读者能够指正,感谢. 变量是我们经常用到的一种,我在刚学 Jav ...

  8. Spring 自动装配 byType

    自动装配 byType,这种模式由属性类型指定自动装配. Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType.然后,如果它的 typ ...

  9. MySQL复制表结构以及复制表等等

    mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 1 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2; 或 1 CREATE TABL ...

  10. UIAutomator2的API文档(一)

    检查并维持设备端守护进程处于运行状态,应该是重启了atx守护进程:d.healthcheck() 1.隐式等待 import uiautomator2 as u2serialno = '7f3dec6 ...