漫话:如何给女朋友解释什么是Git和GitHub?

新闻
想要介绍什么是GitHub,就要介绍下什么是Git,想要介绍什么是Git,那就不得不提版本控制。

 周末,我正在家里看电视,女朋友在一旁刷手机,相安无事。谁知道,刚过了没多久,她突然问我:

 

 

版本控制

想要介绍什么是GitHub,就要介绍下什么是Git,想要介绍什么是Git,那就不得不提版本控制。

我们知道,如果多台计算机在同一个局域网中,是可以进行局域网文件共享的。共享者可以通过设置把自己文件共享给他人进行阅读和修改。

 

对于同一份共享文件,如果又多个人需要修改的话会发生什么事情呢?假设现在有三个人,A分享了文件夹mhcoding,其中包含了三个文件mhcoding1.png,mhcoding2.png,mhcoding3.png,B和C需要对这份文件进行修改。

B和C分别把mhcoding文件夹拷贝到自己的电脑上,然后进行修改,改完之后需要再把自己修改上传上去。B先改完了之后把自己的文件上传上去,覆盖了A的分享。之后C也改完了,也把自己的改动上传上去。这样,C就会把B的修改覆盖掉。

为了上述这种问题,就需要通过一种方式来在C想要上传文件的时候来提醒他,告诉他需要考虑到B已经改过文件的事情。

比较好的方式就是通过版本控制。

如果使用了版本控制系统,每一个团队成员都可以在任何时间对任何文件毫无顾虑的进行修改,版本控制系统可以提醒我们文件修改冲突,甚至可以帮我们自动把多个人的改动合并到一起。

有了版本控制,我们还可以回溯查看以前某一个版本中具体文件的内容,还可以查看某一次改动的变更内容。非常适合团队协作。

 

版本控制的方式

本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做的好处就是简单。不过坏处也不少:有时候会混淆所在的工作目录,一旦弄错文件丢了数据就没法撤销恢复。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。


集中化的版本控制系统

 

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统应运而生。

这类系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出文件或者提交更新。

 

这种做法带来了许多好处,特别是相较于老式的本地版本来说。现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理起来也轻松容易的多。

 

分布式版本控制系统

集中化最显而易见的缺点是中央服务器的单点问题。如果中央服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。

于是分布式版本控制系统面世了。在这类系统中,客户端并不只提取版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

 

Git

git其实就是一款我们前面介绍的分布式版本控制软件,Git具有以下特点:

  • 直接记录快照,而非差异比较
  • 近乎所有操作都是本地执行
  • 时刻保持数据完整性
  • 多数操作仅添加数据

 

[[263753]]

程序员是比较典型的需要团队协作的职业,大多数情况下,都是需要多个程序员同时开发同一个项目的,就好像多个程序员要同时修改一份word文档一样。所以,Git是很多程序员的必备工具。

 

GitHub

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为版本库格式进行托管,故名GitHub。

所谓托管平台,也就是说他可以用于存放文件。只不过上面的文件都是可以公开被访问到的。

 

GitHub是通过Git进行版本控制的软件源代码托管服务,并且,GitHub还引入了一些社交属性。

 

简单的说,在GitHub上面,你可以提交你自己写的代码(发微博)、关注(粉)某人、关注(赞)某个项目、添加评论、Fork(转发)一个项目来自己修改,这些功能和微博都是一样的,只是将我们的吐槽换成了由各种编程语言写的代码。我们平时见到的大部分开源代码也都是挂在上面的。

 

最近比较火的996icu项目我们说他有10多万的Star,就是说由10W+的人关注了这个项目。

 

GitHub上那些奇葩"项目"

Dress - 女装大佬聚集地

有129名贡献者在这个名为Dress的项目里集结,上传了数千张女装照,收获了8000余颗星。

[[263758]]

 

你敢相信这是个码农?

地址:https://github.com/komeiji-satori/Dress

Thanos - 灭霸命令

Thanos.sh是一个开源的个灭霸命令,可随机删除电脑上一半文件。

[[263759]]

地址:https://github.com/hotvulcan/Thanos.sh

 

nocode - 一行代码都没有

这是一个Issue比项目更精彩的项目,项目中一行代码都没有。

 

想问下,Star这个项目的2.7万人是有多无聊???

地址:https://github.com/kelseyhightower/nocode

programmer-job-blacklist 码农找工作黑名单

地址:https://github.com/shengxinjing/programmer-job-blacklist

hangzhou_house_knowledge 杭州买房攻略

地址:https://github.com/houshanren/hangzhou_house_knowledge

howmanypeoplearearound 通过 Wi-Fi 信号估计附近有多少人

地址:https://github.com/schollz/howmanypeoplearearound

 

参考资料:

https://git-scm.com/book/zh/v1/

https://www.jianshu.com/p/b2ad5d9daa23

https://www.zhihu.com/question/23498424

 

责任编辑:武晓燕 来源: 漫话编程
相关推荐

2020-03-16 14:08:59

线程熔断限流

2019-10-09 10:45:16

云计算Web互联网

2021-09-14 12:00:11

VR字节跳动

2019-12-23 10:26:02

3PC分布式2PC

2019-07-22 10:34:31

大案牍术大数据Big Data

2020-10-19 13:01:31

删库程序员思科

2019-03-12 09:43:14

反向代理正向代理服务器

2019-04-09 09:40:23

2020-03-23 12:57:20

撞库脱库洗库

2020-12-28 12:37:36

缓存击穿穿透

2019-04-19 09:48:53

乐观锁悲观锁数据库

2019-08-13 10:34:26

鸿蒙OS跨平台Linux内核

2021-06-07 12:11:20

JavaRunning状态

2021-03-02 06:03:30

Java继承对象

2021-03-09 12:27:05

微服务 微服务架构应用程序

2021-05-10 19:58:06

MySQLUTF-8数据库

2021-04-26 14:00:43

Java 数据类型

2020-10-12 13:27:21

计算机浏览器电脑

2019-03-06 10:59:09

宽带王者荣耀网络

2020-12-28 06:11:24

羊群效应zookeeper
点赞
收藏

51CTO技术栈公众号