专注于Java领域优质技术,欢迎关注
来自:漫话编程
周末,我正在家里看《最强大脑》,女朋友在一旁刷手机,相安无事。谁知道,刚过了没多久,她突然问我:
![862f0af98ef390b54d4399de4a68f8ff.png](https://i-blog.csdnimg.cn/blog_migrate/5b93b634509cb7ed6b3453eea1bf94e5.jpeg)
![a02630293c0babc2371d5c4057449156.png](https://i-blog.csdnimg.cn/blog_migrate/6be382664c3dbcb708251bf94edd058d.jpeg)
![b3ca3c1c5d34723c51baff3cb01d3dac.png](https://i-blog.csdnimg.cn/blog_migrate/e6b238d89a02078b1bc243ea6e99b623.jpeg)
![2324d4a34265dfce68f55ae2049f9efc.png](https://i-blog.csdnimg.cn/blog_migrate/78edb40e9482be54ab2a63b17f19203b.jpeg)
![023afb01370745a56228f379b687ecbb.png](https://i-blog.csdnimg.cn/blog_migrate/5f131e44ed2498d9cf181f9ac51a83e0.jpeg)
![50acfe63e282c9039dbad65eab227b71.png](https://i-blog.csdnimg.cn/blog_migrate/164b3f3f15bf1880c958e9aae05ea4ab.jpeg)
![c7c5dc88f748ec9e8e709be19a990f05.png](https://i-blog.csdnimg.cn/blog_migrate/c2ce6cfc3387e604e7e1fffb3d988642.jpeg)
![89cedd934d50bcbef929969780572bee.png](https://i-blog.csdnimg.cn/blog_migrate/fee3fd3e741800345f25d036e33768e3.jpeg)
版本控制
想要介绍什么是GitHub,就要介绍下什么是Git,想要介绍什么是Git,那就不得不提版本控制。
我们知道,如果多台计算机在同一个局域网中,是可以进行局域网文件共享的。共享者可以通过设置把自己文件共享给他人进行阅读和修改。
![177c5e5c65b98430fc62b71ef13907a8.png](https://i-blog.csdnimg.cn/blog_migrate/11a158f6131a2fbb4bbafac5797110ff.jpeg)
对于同一份共享文件,如果又多个人需要修改的话会发生什么事情呢?假设现在有三个人,A分享了文件夹mhcoding,其中包含了三个文件mhcoding1.png,mhcoding2.png,mhcoding3.png,B和C需要对这份文件进行修改。
B和C分别把mhcoding文件夹拷贝到自己的电脑上,然后进行修改,改完之后需要再把自己修改上传上去。B先改完了之后把自己的文件上传上去,覆盖了A的分享。之后C也改完了,也把自己的改动上传上去。这样,C就会把B的修改覆盖掉。
为了上述这种问题,就需要通过一种方式来在C想要上传文件的时候来提醒他,告诉他需要考虑到B已经改过文件的事情。
比较好的方式就是通过版本控制。
如果使用了版本控制系统,每一个团队成员都可以在任何时间对任何文件毫无顾虑的进行修改,版本控制系统可以提醒我们文件修改冲突,甚至可以帮我们自动把多个人的改动合并到一起。
有了版本控制,我们还可以回溯查看以前某一个版本中具体文件的内容,还可以查看某一次改动的变更内容。非常适合团队协作。
![0fe3208e9fd67c09440b5647a4f560a0.png](https://i-blog.csdnimg.cn/blog_migrate/3011fc7de5bc45b4a447fec645e5eaba.jpeg)
![67e9b380a311f20787a2d3f24f73c358.png](https://i-blog.csdnimg.cn/blog_migrate/838e41bb9bb1e31dd807b6f3bc4f7069.jpeg)
![f7c4801c62a51e8cb35b173c83c6b7d7.png](https://i-blog.csdnimg.cn/blog_migrate/03dd27dd15353b6580c1d2bcb519a510.jpeg)
![2533608b67f417af53df541ae712c19d.png](https://i-blog.csdnimg.cn/blog_migrate/3595608ec3a26d38259dcad673eb21e9.jpeg)
版本控制的方式
本地版本控制系统
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少:有时候会混淆所在的工作目录,一旦弄错文件丢了数据就没法撤销恢复。
![68d819e0b3f7793bc8a3a1261202a0e9.png](https://i-blog.csdnimg.cn/blog_migrate/b724dac6e8ca444bce08b297291bf9fe.jpeg)

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
![d07117b2be6dcb62f8fb5f7269664d2d.png](https://i-blog.csdnimg.cn/blog_migrate/62120fd0804361fde6862cefa2c102fc.jpeg)

集中化的版本控制系统
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统应运而生。
这类系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
![b6491b302432eb49d6516b5d8393dbe7.png](https://i-blog.csdnimg.cn/blog_migrate/91bf39ca2258f9b4a70198f19e596836.jpeg)

这种做法带来了许多好处,特别是相较于老式的本地版本来说。现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理起来也轻松容易的多。
分布式版本控制系统
集中化最显而易见的缺点是中央服务器的单点问题。如果中央服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。
于是分布式版本控制系统面世了。在这类系统中,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
![11030d69d9249860d41b2daff2576a79.png](https://i-blog.csdnimg.cn/blog_migrate/0f3771ecb8bc1ab2abbccfbeb40d6d02.jpeg)

![d64ef99164d16e716ae336cc18713a35.png](https://i-blog.csdnimg.cn/blog_migrate/4bff300d5c8fff296aa96f1b896f79d8.jpeg)
![43594a3f346c250d70a21ba62cad0055.png](https://i-blog.csdnimg.cn/blog_migrate/c5b435a629baa1a281618037e98444a7.jpeg)
Git
git其实就是一款我们前面介绍的分布式版本控制软件,Git具有以下特点:
- 直接记录快照,而非差异比较
- 近乎所有操作都是本地执行
- 时刻保持数据完整性
- 多数操作仅添加数据
![25698e1d17cdecf1ce94bfd30966c4b8.png](https://i-blog.csdnimg.cn/blog_migrate/0f245a9f3bd4bca6ad21418bbcc0a477.jpeg)

程序员是比较典型的需要团队协作的职业,大多数情况下,都是需要多个程序员同时开发同一个项目的,就好像多个程序员要同时修改一份word文档一样。所以,Git是很多程序员的必备工具。
![6e7ce77f9ea0458566be95a8fea9f05e.png](https://i-blog.csdnimg.cn/blog_migrate/5f5e30687eeb44f053d586de2b5195e2.jpeg)
![3b8887164408603807493625aed68899.png](https://i-blog.csdnimg.cn/blog_migrate/bb7525f02b67883f36ebf5183d71291e.jpeg)
![fc3180dd23c7e14f8c886d94e814b624.png](https://i-blog.csdnimg.cn/blog_migrate/f996fca691cb2229a38ad652eaa33e24.jpeg)
GitHub
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。
![63ca622aceddf5be7aa2e146887ca0de.png](https://i-blog.csdnimg.cn/blog_migrate/7e6d6c6a79b2047d92eda3c0eeb65629.jpeg)

所谓托管平台,也就是说他可以用于存放文件。只不过上面的文件都是可以公开被访问到的。
GitHub是通过Git进行版本控制的软件源代码托管服务,并且,GitHub还引入了一些社交属性。号称是世界上最大的程序员(同性)交友网站。
![753c320f3433aeeaacb2d99c8b410c40.png](https://i-blog.csdnimg.cn/blog_migrate/6a64e12a71eabc23e2fccfb04c59c7dc.jpeg)

简单的说,在GitHub上面,你可以提交你自己写的代码(发微博)、关注(粉)某人、关注(赞)某个项目、添加评论、Fork(转发)一个项目来自己修改,这些功能和微博都是一样的,只是将我们的吐槽换成了由各种编程语言写的代码。我们平时见到的大部分开源代码也都是挂在上面的。
最近比较火的996icu项目我们说他有10多万的Star,就是说由10W+的人关注了这个项目。
![171ad0e224c56b91d0ca8092dd8c0a00.png](https://i-blog.csdnimg.cn/blog_migrate/20356a882f0fe13f3d5907f22c3d1fa6.jpeg)

![ad48b5ce99ac02277501bd69c3832d0c.png](https://i-blog.csdnimg.cn/blog_migrate/ccd1d6b89cedf7c8f94eb565f5eca17f.jpeg)
![97390ec97e07c22b0e225bac1840edaf.png](https://i-blog.csdnimg.cn/blog_migrate/c08f4f72cb4e5f421eff08bef359b4ee.jpeg)
GitHub上那些奇葩"项目"
Dress - 女装大佬聚集地
有129名贡献者在这个名为Dress的项目里集结,上传了数千张女装照,收获了8000余颗星。
![a4b186affc90c5958cbe054d024ba411.png](https://i-blog.csdnimg.cn/blog_migrate/13c23034a1761af8b96f0a77d8ea507a.jpeg)

你敢相信这是个码农?
地址:https://github.com/komeiji-satori/Dress
Thanos - 灭霸命令
Thanos.sh是一个开源的个灭霸命令,可随机删除电脑上一半文件。
![46cdc75db3daf1a3a32201fa468a0dcc.png](https://i-blog.csdnimg.cn/blog_migrate/ebc5521719bc0a67bf9c8fdbead20e43.jpeg)

地址:https://github.com/hotvulcan/Thanos.sh
nocode - 一行代码都没有
这是一个Issue比项目更精彩的项目,项目中一行代码都没有,Issue中各种装逼。
![862c992e630e2ab0203b93cd19d6114c.png](https://i-blog.csdnimg.cn/blog_migrate/d80e2d640c8b703c665a21c179887140.jpeg)

想问下,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
![b746aa1ef5823ba0b7f90a0e31ada5de.png](https://i-blog.csdnimg.cn/blog_migrate/c9baa972b220b824272149bd2094a85b.jpeg)
![7751c7f5d411273ab8542b357dbd7591.png](https://i-blog.csdnimg.cn/blog_migrate/f6cb753b8aa1238ab5e0c05d62daddfd.jpeg)
![c38df34d7e0f0ed47487b045a82537d3.png](https://i-blog.csdnimg.cn/blog_migrate/0701e1f10fce10cf1f013659dc3a14e6.jpeg)
![4f4d7646130b45975189f3c37523807b.png](https://i-blog.csdnimg.cn/blog_migrate/b3e75a90f3d2a28232aa0bd3d48cae2f.jpeg)