GitHub 是一个面向开源及私有 软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其托管版本数量非常之多,而且其中不乏知名开源项目,例如 Ruby on Rails、jQuery、python 等。
作为目前世界上最优秀的分布式版本控制系统,它的基本特性有:
直接记录快照而非差异比较
克隆一次即获得代码库的完整副本
近乎所有操作都是本地执行
使用 SHA-1 哈希值保证完整性
Git 一般只添加数据
版本控制系统是能够随着时间的推进记录一系列文件的变化以便于你以后想要的退回到某个版本的系统。版本控制系统分为三大类:本地版本控制系统,集中式版本控制系统和分布式版本控制系统。
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 采用版本控制系统, 可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,项目工作者可以对底层进行大量修改, 但额外增加的工作量却微乎其微。
本地版本控制系统:其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
|
分布式(Git) | ||
是否有中央服务器 | 有。开发人员需要从中央服务器获得最新版本的项目然后在本地开发,开发完推送给中央服务器。因此脱离服务器开发者是几乎无法工作的。 | 没有中央服务器,开发人员本地都有 Local Repository。 | |
网络依赖 | 必须要联网才能工作,而且对网络的依赖性较强,如果推送的文件比较大而且网络状况欠佳,则提交文件的速度会受到很大的限制。 | 分布式在没有网络的情况下也可以执行commit、查看版本提交记录、以及分支操作,在有网络的情况下执行 push 到 Remote Repository。 | |
文件存储格式 | 按照原始文件存储,体积较大。 | 按照元数据方式存储,体积很小。 | |
是否有版本号 | 有。 | 没有。 | |
分支操作的影响 | 创建新的分支则所有的人都会拥有和你一样的分支。 | 分支操作不会影响其他开发人员 | |
提交 | 提交的文件会直接记录到中央版本库。 | 提交是本地操作,需要执行push操作才会到主要版本库。 |
Github的部分特性:
如果只使用免费版,那么无法创建私人仓库(Repository),只能创建开放仓库;开放仓库可被任何人克隆或 Fork。
可以作为独立开发者建立自己的代码仓库,团队协作的话也可以通过建立组织(Organization)来管理组织下的仓库、团队、成员、权限等。
如果是开源项目,可以很容易 Fork 其它开源项目的代码库到自己的账号下;也可以向别人发起 Pull Request 请求,请求作者将 Fork 下来之后的代码修改合并到原代码库中。
Pull Request 提供了强大的代码评审、代码合并的机制。通过创建 Pull Request 向开源项目的作者或者管理者发起合并自己代码的请求,我们可以轻松地向开源项目贡献代码。代码评审和 Pull Request 将在随后的系列文章中详细介绍。
使用 Gist 可以管理一些自己常用的代码片段、常用的命令,也可以分享给其他开发者。
GitHub 上也可以管理钩子(Hook),可用于自动构建过程,例如引入 Jenkins 的 WebHook,使得 Jenkins 可以在每次发现代码提交后立即触发一次项目构建。
GitHub 也提供了很多可选的集成服务(Integration & Service)使用,例如集成 ZenHub 插件,可以进行敏捷式项目管理。
原文:https://www.cnblogs.com/lihaimuzhou/p/12977532.html