点击蓝色 “视学算法” 关注我

加个 “星标”,每天学知识!

本文经授权转载自漫话编程(ID:mhcoding)

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

版本控制

想要介绍什么是 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 具有以下特点:

  • 直接记录快照,而非差异比较

  • 近乎所有操作都是本地执行

  • 时刻保持数据完整性

  • 多数操作仅添加数据

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

GitHub

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

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

GitHub 是通过 Git 进行版本控制的软件源代码托管服务,并且,GitHub 还引入了一些社交属性。号称是世界上最大的程序员(同性)交友网站。

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

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

GitHub上那些奇葩"项目"

Dress - 女装大佬聚集地

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

你敢相信这是个码农?

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

Thanos - 灭霸命令

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

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

nocode - 一行代码都没有

这是一个 issue 比项目更精彩的项目,项目中一行代码都没有,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

觉得内容不错,就请点个「在看」吧~

推荐阅读:

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

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

    周末,我正在家里看<最强大脑>,女朋友在一旁刷手机,相安无事.谁知道,刚过了没多久,她突然问我: 版本控制 想要介绍什么是GitHub,就要介绍下什么是Git,想要介绍什么是Git,那就不 ...

  2. 漫话:如何给女朋友解释什么是3PC?

    一顿愉快的小火锅之后,悠哉悠哉的回家了,于是只能开始新一轮的家庭科普了. 分布式一致性 幸好在<漫话:如何给女朋友解释什么是2PC(二阶段提交)?>中介绍过关于2PC的知识,要不然这事儿可 ...

  3. 漫话:如何给女朋友解释什么是适配器模式?

    本文经授权转载自微信公众号:漫话编程 周末窝在家里面打王者荣耀,女朋友在旁边玩我的电脑,我嫌她播放的综艺节目声音比较大,于是建议她戴耳机. 适配器模式 Adapter Pattern,通常被翻译成适配 ...

  4. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?

    本文经授权转载自微信公众号:漫话编程 周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问题,其中包括什么是BIO.NIO和AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是很 ...

  5. java 日期加一天_漫话:如何给女朋友解释为什么一到年底,部分网站就会出现日期混乱的现象?...

    2019年最后一天,在家里看着跨年晚会,享受着这一年最后一天的闲暇时光,女朋友在旁边玩手机.看了一会之后她突然问我一些很奇怪的问题. 于是我拿过他的手机,看到了下面这一幕: 这是微信官方出的公众号管理 ...

  6. 漫话:如何给女朋友解释什么是 3PC?

    作者 | 漫话编程 本文经授权转载自漫话编程(ID:mhcoding) 责编 | 胡巍巍 一顿愉快的小火锅之后,悠哉悠哉的回家了,于是只能开始新一轮的家庭科普了. 分布式一致性 幸好在<漫话:如 ...

  7. 漫话:如何给女朋友解释什么是语法糖?

    语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家Peter J. Landin发明的一个技术术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响, ...

  8. 漫话:如何给女朋友解释为什么吴某凡会被中间人攻击?

    中间人攻击 中间人攻击(Man-in-the-middle attack,缩写:MITM)在密码学和计算机安全领域中是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们 ...

  9. 漫话:如何给女朋友解释什么是Mock?

    某天晚上,接到测试的电话,他问为什么在日常环境我的接口使用不同的用户测试返回的内容都一样,我回答他:接口数据被我mock掉了,现在返回的都是mock数据.需要调一下mock的逻辑才行. 挂断电话之后, ...

最新文章

  1. 3分钟4 步快速带你在win10电脑装上openCV3.4 (python使用)
  2. Emacs 矩形编辑
  3. 可变导向车道——为了缓解高峰压力的临时转向车道
  4. 网关和路由器的区别_工业网关和工业路由器的区别?
  5. Linux编程 20 shell编程(shell脚本创建,echo显示信息)
  6. GDCM:Dicom文件Empty Mask的测试程序
  7. WEB效能测试和负载测试部分截图
  8. Python匿名函数---排序
  9. 表单设置默认值_你还不知道表单怎么设计吗?看这里!
  10. ubuntu学习日记--Lesson5:系统目录详解
  11. Perl 学习手札之十三:building function
  12. Oracle 查看表空间使用率,表空间扩展
  13. 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校扎实推进“新技工系统培养”民生工程...
  14. 计算机类毕业设计选题推荐 springboot+vue宠物医院管理系统 java宠物预约挂号系统 微服务 宠物挂号系统 宠物医院预约挂号系统 springboot宠物诊所
  15. 登录时用户名或密码错误弹窗提醒重新登录
  16. Users.ktr使用文档
  17. python 发布文章,使用Python自动化发布文章:(一)
  18. SQL中十六进制和字符串之间的转换
  19. 人脸识别登录:加强系统认证
  20. ElasticSearch DSL语言高级查询+SpringBoot

热门文章

  1. 【MATLAB】符号数学计算(七):符号微积分、符号微分方程求解、符号代数方程求解
  2. 构建第三代人工智能核心能力,清华、阿里、RealAI等联合发布最新AI安全评估平台
  3. 微软推出“ Group Transcribe”应用,多人多语言会议实时高准确度文字转录并翻译
  4. 良心贴!没想到 Google 排名第一的编程语言,可以这么简单!
  5. 用Python实现抖音上的“人像动漫化”特效,原来这么简单
  6. 京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈!
  7. 这项技术厉害了!让旅行者 2 号从星际空间发首批数据!
  8. 从原理到代码,轻松深入逻辑回归模型!
  9. 上手!深度学习最常见的26个模型练习项目汇总
  10. 精选机器学习开源项目Top10