GitHub概述
1 引言
GitHub是为开发者提供Git仓库的托管服务,是一个让开发者与同事、同学及相同兴趣爱好者共享代码的完美场所。
GitHub公司总部位于美国旧金山,拥有一只似章鱼又似猫的吉祥物。

GitHub除提供Git仓库的托管服务外,还为开发者或团队提供了一系列功能,帮助其高效率、高品质地进行代码编写。(后面详述)
GitHub创始人之一Chris Wanstrath表示GitHub并非只是想实现分享代码的功能,认为这只是其中之一。
2 GitHub与Git的区别
目前,GitHub托管的仓库数已超千万,全世界的开发者都在使用它。但很多人仍然具有这样的疑问,GitHub与Git之间有什么区别和联系呢?

Git是一个版本控制系统,开发者将源代码存入名叫“Git仓库”的资料库中并加以使用。
而GitHub则是在网络上提供Git仓库的一项服务,也就是说,GitHub上公开的软件源代码全都由Git进行管理。因此,理解Git,是熟练运用GitHub的关键所在。

3 GitHub带来的变化
此前,用于辅助多人协同工作的软件层出不穷,然而在以程序员为代表的软件开发者之间,一直都没有一个用来辅助多人协同编程的关键性软件。
因为软件开发者们往往要将版本管理系统、BUG跟踪系统、代码审查工具、邮件列表、IRC等众多工具组合在一起,才能实现多人协作。
然而,GitHub的出现为这种软件开发协作模式带来了巨大的变化。
3.1 Pull Request
Pull Request功能实现了让素未谋面的开发者们隔着半个地球的距离共同开发软件。让开发者在本地对源代码进行更改后,可以向GitHub中托管的Git仓库请求合并。
开发者们还可以在Pull Request上通过评论交流,例如“修正了BUG,可以合并一下吗?”、“我试着做了这样一个新功能,可以合并一下吗?”等。
基于此功能,开发者可以轻松更改源代码,并公开更改的细节,然后向仓库提交合并请求。而且,如果请求的更改与项目的初衷相违,也可以选择拒绝合并。
Pull Request不但能轻松查看源代码的前后差别,还可以对指定的一行代码进行评论。基于此功能,开发者们可以针对具体的代码进行评论,使代码审查的工作变得前所未有的惬意。

3.2 对特定用户进行评论
GitHub中任务管理和BUG报告可以通过Issue进行交互。如果想让特定用户来看,只要用“@用户名”的格式书写,对方便会接到通知(Notifications),查看Issue。
当使用“@组织名”格式时,可以让属于该组织(Organization)的所有成员都收到通知,即实现同时向多人发送通知的方法。
当使用“#编号”格式时,会连接到该仓库所对应的Issue编号;使用“用户名/仓库名 #编号”格式时,可以连接到指定仓库所对应的Issue编号。
GitHub也提供了WiKi功能,开发者可以轻松创建文档,进行公开、共享。WiKi更新的历史记录也在Git中管理,可以让用户轻松更改。

3.3 GitHub Flavored Markdown
在GitHub上,用户所有用文字输入的功能都可以用GitHub Flavored Markdown(GFM)语法进行描述。
此语法可以让标记变得简单,以此写出的评论与文档也会更容易理解。并且此语法还允许用户在评论中添加文字表情,使用户间的交流更加顺利。
3.4 能看到更多其他团队的软件
GitHub提供的环境并不只局限于自己团队内部,只要将感兴趣的仓库添加至Watch,就可以在News Feed查看该仓库的相关信息。
如将全公司共用代码库的仓库添加到Watch中,便能在第一时间掌握最新版本的新功能或BUG修正的信息。如有必要,你还可提出意见并通过Pull Request提交自己的代码。
又如将其他团队正在开发的仓库添加到Watch中,就可以查看他们都在开发什么功能,一旦发现有用的功能或库,就可以立刻运用到自己的开发团队。
3.5 与开源软件相同的开发模式
将GitHub运用到企业中,便会带来与开源软件相同的开发模式。
已经熟悉开源软件开发的开发者不必专门去学习企业独自采用的工具,就可以直接加入到开发行列。
4 社会化编程
随着GitHub的出现,软件开发者们才真正意义上拥有了源代码。世界上任何人都可以比从前更加容易地获得源代码,将其自由更改并加以公开。
如今,世界众多程序员都在通过GitHub公开源代码,同时利用GitHub支持着自己日常的软件开发,这就是社会化编程带来的好处。

5 GitHub主要功能概述
- Git仓库
一般情况下,用户可以免费创建任意个GitHub提供的Git仓库,但如果需要建立只对特定人物或只对自己公开的私有仓库,则需要付费才能使用。
Organization
一般情况下,个人使用时只需要个人账户便足够了,但如果是公司,建议使用Organization账户。其优点在于可以统一管理账户和权限,还能统一支付一些费用。
- Issue
实现将一个任务或问题分配给一个Issue进行追踪和管理的功能。
在GitHub上,每一个功能更改或修正都对应一个Issue,讨论或修正都以这个Issue为中心进行。只要查看Issue,就能知道和这个更改相关的一切信息,并以此进行管理。
- WiKi
实现任何人都能随时对一篇文章进行更改并保存,因此可以多人共同完成一篇文章。该功能常用在开发文档或手册的编写中,并通过GFM语法进行编写。
- Pull Request
开发者向GitHub的仓库推送更改或功能添加后,可以通过Pull Request功能向别人的仓库提出申请,请求对方合并。
Pull Request送出后,目标仓库的管理者等人将能够查看Pull Request的内容及其中包含的代码更改。
同时,GitHub还提供了对Pull Request和源代码前后差别进行讨论的功能。通过此功能,可以以行为单位对源代码添加评论,让程序员之间高效地交流。
6 小结

未完待续……
本文章属于原创作品,欢迎大家转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:躬耕南阳 https://www.cnblogs.com/yangmi511/
GitHub概述的更多相关文章
- 使用Jekyll搭建免费的Github Pages个人博客
一.Git 1.Git概述 Git is a free and open source distributed version control system designed to handle ev ...
- Raft算法,从学习到忘记
Raft算法,从学习到忘记 --Raft算法阅读笔记. --Github 概述 说到分布式一致性算法,可能大多数人的第一反应是paxos算法.但是paxos算法一直以来都被认为是难以理解,难以实现.S ...
- iOS开源加密相册Agony的实现(七)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- iOS开源加密相册Agony的实现(六)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- iOS开源加密相册Agony的实现(五)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- iOS开源加密相册Agony的实现(四)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- iOS开源加密相册Agony的实现(三)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- iOS开源加密相册Agony的实现(二)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- iOS开源加密相册Agony的实现(一)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
随机推荐
- 设置允许外网访问MySQL
1:设置mysql的配置文件 /etc/mysql/my.cnf 找到 bind-address =127.0.0.1 将其注释掉://作用是使得不再只允许本地访问: 重启my ...
- WARNING: The host '$hostname' could not be looked up with resolveip. (转)
环境介绍:CentOS6.X MySQL版本:5.5.X以上 执行scripts/mysql_install_db脚本时,抛出一条Warning,主机名和IP地址无法解析: The host '$ho ...
- Vue.js 计算属性computed和methods的区别
在vue.js中,有methods和computed两种方式来动态当作方法来用的 如下: 两种方式在这种情况下的结果是一样的 写法上的区别是computed计算属性的方式在用属性时不用加(),而met ...
- StackExchange.Redis 之 String 类型示例
String类型很简单,就不做示例演示了,这里只贴出Helper类 /// <summary> /// 判断key是否存在 /// </summary> /// <par ...
- Python当中的len(),str(),input(),print()函数当中值得注意的点
在python当中很多时候会用到这三个函数,这也是考试当中十分常见的考点,这里做一些记录: 1.len():用于测量变量当中的字符串/元组等的长度 举个例子: >>> stt=&qu ...
- spring cloud springboot 框架源码 activiti工作流 前后分离 集成代码生成器
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- 安卓接入融云IM连接不上??
融云初始化失败?融云连接失败??连接回调方法不执行???不可能的,就那么几行代码,怎么会有错. 1.项目gradle里添加融云maven仓库 maven {url "https://dl.b ...
- MySQL必知必会--分 组 数 据
数据分组 目前为止的所有计算都是在表的所有数据或匹配特定的 WHERE 子句的 数据上进行的.提示一下,下面的例子返回供应商 1003 提供的产品数目 但如果要返回每个供应商提供的产品数目怎么办?或者 ...
- Git操作:绑定上传已存在的仓库到Github
之前使用github都是创建一个全新的仓库,然后clone下来用,但如果我已经有一个正在使用的仓库,想要绑定上传已存在的仓库到github,怎么做呢?其实在github创建仓库的时候会提示: …or ...
- 纪中某日c组模拟赛 2314. 最短路
2314. 最短路 (File IO): input:dti.in output:dti.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto Problem ...