在介绍Github以前,咱们一块儿了解一下SVN、Git、Github这三个概念、分别的责任以及相关联的区别。ios
SVN(Subversion)是集中式管理的版本控制器。git
SVN只有一个单一的集中管理的服务器,保存全部文件的修订版本,而协同工做的人们都经过客户端连到这台服务器,取出最新的文件或者提交更新。就比如是一个图书馆,你要改一本书,必须先从图书馆借出来,而后回到家本身改,改完了,再放回图书馆。程序员
集中式版本控制系统最大的问题就是必须联网才能工做,若是在局域网内还好,带宽够大,速度够快,可若是在互联网上,遇到网速慢的话,可能提交一个10M的文件就须要5分钟。 github
![]()
Git是分布式管理的版本控制器。web
简单介绍一下Git:shell
Linux的创始人Linus Torvalds在2015年开发了Git的原型程序。Linux内核的更新速度在全世界也是数一数二。数据库
Git 像是把数据看做是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的所有文件制做一个快照并保存这个快照的索引。 为了高效,若是文件没有修改,Git 再也不从新存储该文件,而是只保留一个连接指向以前存储的文件。 Git 对待数据更像是一个 快照流。编程
Git每个终端都是一个仓库,客户端并不仅提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操做,实际上都是一次对代码仓库的完整备份。浏览器
Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中。安全
基本的 Git 工做流程以下:
- 在工做目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
分布式版本控制系统一般也有一台充当
“中央服务器”
的电脑,但这个服务器的做用仅仅是用来方便“交换”你们的修改,没有它你们也同样干活,只是交换修改不方便而已。![]()
Github是一个基于Git的代码托管平台,主要为开发者提供基于Git仓库的版本托管服务,并提供一个web界面。
Github的付费用户能够建私人仓库,免费用户只能使用公共仓库,也就是代码要公开。
Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。 总部位于美国旧金山。
GitHub最大的特征:"面向人"。
- GitHub 与以往的仓库管理服务最大的不一样,就在于它以人为中心,以往的仓库托管都是以项目为中心,每一个项目就是一个信息封闭的世界。
版本管理系统分为Subversion这种集中型和Git这种分散型。
GitHub上,链接已有仓库时的认证,是经过使用SSH的公开密钥认证方式进行的。
建立SSH Key:
$ ssh-keygen -t rsa -C "【此处填写建立github时的邮箱,例如your_email@example.com】"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):【此处按回车键】
Enter passphrase (empty for no passphrase): 【此处输入密码】
Enter same passphrase again:【此处再次输入密码】
复制代码
id_rsa文件是私有密钥, id_rsa.pub是公开密钥
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
fingerprint your_email@example.com
The key's randomart image is: +--[ RSA 2048]----+ | .+ + | | =oO. | 【略】 复制代码
在GitHub中添加公开密钥,从此就能够用私有密钥进行认证了。
New SSH Key
后,会要求输入Title和Key:
Title中请输入适当的密钥名称
Key部分请粘贴 id_rsa.pub 公开密钥 文件里的内容,其中获取 id_rsa.pub 公开密钥的方式以下:
$ cat ~/.ssh/id_rsa.pub
复制代码
会获得如下形式的内容:
添加成功后,建立帐户时,该邮箱会接到一封"公共密钥添加完成"的邮件。
只有公开密钥添加完成后,才可添加私人密钥,经过私人密钥与GitHub进行认证和通讯。
$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established. RSA key fingerprint is fingerprint . Are you sure you want to continue connecting (yes/no)? yes 复制代码
获得如下结果,即为成功:
Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access. 复制代码
Follow
Watch
右上角的➕/New repository
填写以下内容
Repository name:填写仓库名称
Description:填写仓库说明
Public、Private:公开仓库Public内全部内容会被公开,选择Private则为建立非公开仓库,用户能够设置访问权限,但须要收费。
Initialize this repository with a README:用README文件初始化仓库,打上勾之后,让用户能够马上clone这个仓库。若是想向GitHub添加手中已有的Git仓库,建议不要勾选,直接手动push。
Add .gitignore:
Add .gitignore这个下拉菜单很方便,经过它能够在温馨化时,自动生成Add .gitignore文件(这个文件用来描述Git仓库中不须要管理的文件与目录)。
这个设定会帮咱们把不须要在Git仓库中进行版本管理的文件记录在Add .gitignore文件中,省去了每次根据框架进行设置的麻烦。
Add a license:
Add a license菜单能够选择要添加的许可协议文件。若是这个仓库中包含的代码已经肯定了许可协议,那么请在这里进行选择。
都填充和选择完后,点击Create repository,完成仓库的建立。
clone已有仓库
打开须要拷贝的仓库连接,点击右侧按钮:Clone or download,得到一个git地址(例如:git@github.com:user-name/new-repository.git)
$ git clone git@github.com:user-name/new-repository.git
Cloning into 'new-repository'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
$ cd new-repository
复制代码
注意:这里会要求输入GitHub上设置的公开密钥的密码,认证后,仓库便会被clone到仓库名后的目录中,将想要公开的代码提交至这个仓库再push到GitHub的仓库中,代码便会被公开。
几个经常使用的git命令
以下:
$ mkdir 文件夹名字
$ cd 文件夹名字
本地仓库连接Github远程仓库时,内容上的推送和拉取,必要经过git操做命令来完成。
打开GitHub快捷键一览表的方式:shift+/
Git仓库
咱们能够免费创建任意个GitHub提供的Git仓库(可是若是须要建立私有仓库,则须要花钱)。
Organization 组织、团体
通常咱们只用我的帐户就够了,若是是公司,建议使用Organization帐户(要花钱),优势是能够统一管理帐户和全县。
若是只是用公开仓库,是能够免费建立Organization帐户的。
Issue
Issue功能,是将一个任务或问题分配给一个Issue进行追踪和管理的功能。
管理issue的系统称为BTS(Bug Tracking System,BUG跟踪系统)。
遇到如下状况时,可以使用Issue功能:
- 发现软件的bug并报告
- 有事想向做者询问、探讨
- 事先列出从此准备实施的任务
每一个功能更改或修正都对应一个Issue,讨论或修正都以这个Issue为中心进行,发布一个Issue,就相似发布了一个话题,你们均可以围绕这个话题进行讨论。只要查看Issue,就能知道全部和这个更改相关的内容,以此进行管理。
若是别人对你的项目发起了一个Issue,你会经过邮件收到提醒前去查阅便可。
Wiki
wiki功能,任何人都能随时对一篇文章进行更改并保存,所以能够多人共同完成一篇文章。
经常使用此功能来编写开发文档或手册。
wiki页也是做为Git仓库进行管理的,能够记录各个修改版本。
Pull Request
开发者向GitHub的仓库推送更改或功能添加后,能够经过Pull Request功能向别人的仓库提出申请,请求对方合并。是GitHub的核心功能。
GitHub提供了对Pull Request和源代码先后差异进行讨论的功能,可让程序员更高效的交流。
在Pull Request页面可以查看当前处于Open状态的Pull Request。
若是你想要以.diff或者.patch格式文件的形式来处理Pull Reques,能够在URL末尾添加.diff或.patch,例如:
除了 Trending ,还有一种最主动的获取开源项目的方式,那就是 GitHub 的 Search 功能。
Pull requests 是指开发者在本地对源代码进行更改后,向GitHub中托管的Git仓库请求合并的功能。
功能:
- 开发者能够在Pull requests上经过评论进行交流,例如:"我试着作了这样一个新功能,能够合并一下吗"等。
Pull requests 这个功能,开发者能够轻松更改源代码,并公开细节,而后向仓库提交合并请求,仓库的建立者选择性的对其进行合并。
- Pull requests 能够查看源代码的先后差异
任务管理和 BUG 报告能够经过 Issue 进行交互。
- 在团队协做中,每一个 issue 能够表明一个任务,Product Owner 为每个人的每一项任务建立一个issue,由组员自行管理关于本身的issue
- 每个issue被分配有不一样的标签,分为:
- new tasks
- user story
- working on
- waiting for checking
- pass checking
- pass tests
- task completed
每名成员动态调整标签,组长检查全部带有waiting for checking的标签,完成检查后标记为pass checking. 经过测试后标记为pass tests
- 在project中创建一个新项目,经过看板管理全部的issues,组员动态拖动关于本身的issues,组长按期查看。
若是你是项目的维护者,github还支持你以下的操做:
- 将一个issue分配给参与者
- 为一个issue打上标签
- 将一个issue添加到项目的看板
- 为一个issue关联到某个里程碑
github还支持您为仓库中或者是pull request中的特定代码行添加issue
向开发者提供工具改进和定制工做流,是一个购买和发现应用的市场。
Explore GitHub 会把全部近期有活跃的项目呈现给你们,是没有通过筛选的,按照默认排序。
例如:
- Trending,潮流热门趋势的意思。这页里有一些热门的开源项目,GitHub就经过这个页面,作了筛选功能,是你们主动获取一些开源项目最好的途径,能够选择[当天热门]、[一周内热门]、[一月内热门]。也能够经过语言分类来查找想要学习的编程语言,例如你想看最近热门的ios项目,能够选择Objective-C语言
铃铛旁边蓝色的点提示用户是否有新的通知。(默认设置中,用户在GitHub收到通知会同时发送到该帐户的注册邮箱)
建立新的Git仓库,或Organization,向Organization添加成员、小组、仓库,为仓库添加Issue或collaborator等操做的残带都汇集在这里。
用户设置(我的信息、安全管理、付费方案等)
Repository,仓库,存放本身或别人建立的开源项目,也就是若是你想要在Github上建立一个开源项目用来存放代码,必须建立一个Repository,若是你的开源项目多了,你就会拥有多个Repositories
- 若是Watch了某仓库,从此该仓库的更新信息会显示在用户的公开活动中,用户能够追踪仓库的内容。
- Star 表示给这个仓库加星的人数,数量越高,表明该仓库越受关注。star更像是书签,能够在user里面的Your stars中查看到本身标记了的star仓库列表。
- Fork后面的数字表明该仓库被Fork到各用户仓库的次数,数越大,表示参与这个仓库开发的人越多。
显示仓库的文件列表,仓库名下方是该仓库的简单说明和URL。
用于bug报告、功能添加、方向性讨论等,将这些以Issue形式进行管理。Pull Requests时也会建立Issue。旁边显示的数字是当前处于Open状态的Issue数。
Pull Request 是用户修改代码后向对方仓库发送采纳请求的功能,是GitHub的核心功能。代码的更改和讨论都在这里进行,旁边的数字表示还没有关闭的Pull Request的数量。
- Conversation
在Conversation标签页中,能够查看与当前Pull Request相关的全部评论,以及提交历史。
小功能:想要引用别人的评论,能够选中当前评论,按R键,被选择的部分会自动以评论语法写入评论文本框。
![]()
- Commits
Pull Request里面的commits标签页中,按时间顺序显示了与当前Puss Request相关的提交。标签上的数字为提交的次数。
- Checks
- Files Changed
Files Changed标签页中,能够查看当前Pull Request更改的文件内容以及先后差异。数字表示新建及被更改的文件数。
GitHub的项目管理模式
wiki 是一种比HTML语法更简单的页面描述功能。经常使用于记录开发者之间应该共享的信息活着软件文档。
全部人均可以对文章进行修改,因此比较适合多人共同编写文章的状况。很适合用来针对更新频率较高的软件进行文档等信息方面的汇总。
洞察: Pulse:体现该仓库软件开发活跃度的功能。该仓库中的软件是 无人问津,仍是在火热的开发之中,从这里能够一目了然。 Graphs:以图表形式显示该仓库的各项指标。让用户轻松了解该仓库的活动倾向。
- Pulse:体现该仓库软件开发活跃度的功能,近期该仓库建立了多少Pull Request 或 Issue,有多少人参与了这个仓库的开发等,都在这里一目了然
- Active Pull Requests:经过特按期间内活动过的Pull Request数量
- Active Issues:特按期间内活动过的issue数
- commits:commits显示与提交相关的信息
- 编写过代码的人数
- 提交的次数
- default branch 中修改过的文件数
- default branch 中添加/删除的行数
- Contributors:每一个用户在相应的日期中发送提交、添加代码、删除代码的大体数量。可以了解到该仓库的代码主要由哪些人编写。
- Traffic:
- Commits:显示一年内每周收到的提交的大体数量。
- Code Frequency:显示了该仓库中代码行数的增/删量。
- Dependence graph:
- Network:以图表形式显示包括克隆仓库在内的全部分支的提交。从图上能够直观的看出每一个人作了多少工做。
- Forks:
更改当前仓库的设置,用户必须拥有更改设置的权限才能看到这个菜单。
能够在当前仓库的路径下新建文件。新建文件做为一个新的提交记录在Fork出的分支中。 若是用户对该仓库拥有足够权限,该项则显示为Create a new file,用户能够直接在当前路径下新建文件。
上传文件到GitHub的仓库。
能够查看当前分支的文件。
以SSH协议/HTTPS协议下载该仓库;
Open in Desktop 启动GitHub客户端 并进行下载;
经过浏览器等下载仓库的ZIP包
a、 commits
commits 查看当前分支的提交历史。左侧数字表示提交数。
b、 branches
branches 查看仓库的分支列表。数字表示当前拥有的分支数。
c、 releases
releases 显示仓库的标签(Tag)列表,能够将标签加入时的文件以归档(.zip、tar.gz)形式下载到本地。
软件在版本升级时,通常都会打标签,若是须要特定版本的文件,从这里寻找。
d、environment
e、contributors
显示对该仓库进行过提交的程序员名单。
若是你对该仓库发送过Pull Request而且被采纳,那么在这里就能找到本身的名字。数字表示程序员人数。
f、branch
显示当前分支的名称,从这里能够切换仓库内分枝,查看其余分支的文件。
g、new pull request
h、files
files里面能够查看当前分支的文件,以及READEME文件。
点开文件后,会显示文件的内容,同时也会显示一些做用于文件的菜单。
直接在浏览器中显示该文件的内容。
按行显示最新提交的信息。打开之后,左侧为commit时候的提交备注,右侧为当次提交时修改的内容。
查看该文件的历史记录
进入仓库页面后,按下键盘t键,而后输入要找的目录货文件的部分名称,筛选器会在仓库的目录和文件中进行筛选。
查看分支间的差异
例如:要查看master和patch-1这两个分支之间的差异,能够在URL末尾这样写:
github.com/user/projec…master...patch-1
查看与几天前的差异
例如:要查看master分枝在最近7天内的差异,能够在URL末尾这样写:
github.com/user/projec…master@{7.day.ago}...master
查看与指定日期之间的差异
例如:要查看master分枝2019年1月1日与如今的区别,能够在URL末尾这样写:
github.com/user/projec…master@{2019-01-01}...master