GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。作为开源代码库以及版本控制系统,GitHub拥有超过900万开发者用户。随着越来越多的应用程序转移到云上,GitHub已经成为了管理软件开发以及发现现有代码的首选方法。
Git 是分布式版本控制系统,同一个 Git 仓库可以分布到不同的机器上,最开始肯定只有一台机器有一个原始版本库,此后,别的机器可以克隆这个原始版本库,而且每台机器的版本库都是一样的,并没有主次之分。
流程大概也就是这样:
经过前面Git基本操作和浅析Git思想和工作原理的介绍,我们知道Git分工作区和暂存区,而真正发挥Git强大作用不可缺少的一环就是远程仓库(Remote),只要注册账号,就可以从GitHub这个神奇的网站免费获得Git远程仓库。
真正实现分布式的远端仓库
那么如何将 Git 和 GitHub 联系起来呢?这就需要将GitHub设置为Git的远端仓库了,具体步骤如下:
1、注册GitHub账号
进入GitHub官网,注册并登录账号
2、安装并配置Git
见博客Git基本操作,完成Git的安装和配置
3、创建SSH Key
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,通过这种方式,能够在不输入密码的情况下,将GitHub作为自己的远程服务器,进行版本控制。(不配置的话每次提交都要输入用户名密码)
第一步,查看SSH密钥是否存在,若有直接跳到下一步登录GitHub
cd ~/.ssh
第二步,生成密钥,过程中直接按回车,使用默认值即可
ssh-keygen -t rsa -C "<email_address>"
若配置成功,可以在用户主目录中找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的密钥,其中id_rsa
是私钥,不能泄漏出去,id_rsa.put
是公钥,可以告诉其他人。
4、在Github中添加公钥
登录GitHub ---->Settings ----> SSH and GPG keys ----> New SSH key
----> 输入Title ----> 复制公钥 ----> Add SSH key
GitHub需要SSH Key识别推送的提交确实是本人推送的,而不是别人冒充,而Git支持SSH协议。而且,GitHub允许添加多个Key,假如你有若干电脑,只要把每台电脑的Key都添加到GitHub上,就可以在每台电脑上往GitHub推送了。
5、创建远端仓库
New repository ---> 输入Repository name ---> Create respository
此时就成功创建了一个远端仓库,此时这个仓库是空的
6、绑定本地到远端仓库
git remote add origin <http_address>
或者
git remote add origin <ssh_address>
GitHub给出的地址不止一个,实际上,Git支持多种协议,默认的 git://
使用 ssh,但也可以使用 https 等其他协议,但通过ssh支持的原生git协议速度最快。
此外,添加后,远程库的名字就是 origin
,这是Git默认叫法,也可以改成别的。
注:如果不小心绑定了错的远端仓库,再想绑定对的会提示
fatal: remote origin already exists.
此时应该删除错误绑定的远端仓库,执行以下语句即可
git remote rm origin
7、推送改动
git push origin <branch_name>
把本地库的内容推送到远程,实际上是把当前分支推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。关于截图中出现的ssh警告,可以在这里查看更详细的介绍。
从现在起,只要本地作了提交,就可以通过命令:
git push origin master
把本地master分支的最新修改送至GitHub,现在,我们拥有了真正的分布式版本库。
8、克隆远端仓库
git clone <repository_address>
9、拉取远程代码到本地
git pull <远程主机名> <远程分支名>:<本地分知名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样
git pull origin next:master
相当于在自己的工作空间中获取(fetch)并合并(merge)远端的改动。
GitHub 参与开源项目
在GitHub上,利用Git极其强大的克隆和分支功能,广大程序员可以真正自由参与各种开源项目。这里以一个非常强大的CSS框架bootstrap项目为例,展示如何参与开源项目,步骤如下:
- 访问项目主页
- 点“Fork”在自己账号下克隆了一个bookstrap仓库
- 从自己账号下
git clone
到本地
一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
GitHub实现协同工作的 pull request
上面已经讲到如何参与开源项目了,下载到本地进行修改后,要想真正更正该仓库中的错误,就需要用到pull request,整个的流程如下:
- 先 fork 别人的仓库,相当于拷贝一份(不会有人直接让你改修原仓库的)
- clone 到本地分支,做一些 bug fix
- 发起 pull request 给原仓库,让他看到你修改的 bug
- 原仓库 review 这个 bug,如果是正确的话,就会 merge 到他自己的项目中
GitHub 实现协同工作的 issue
GitHub 提供 GitHub Issue,这是一种非常有效的途径,帮助我们在任何特定项目创建记录化,交互化以及自动化的bug或者功能对话。不过Issue可以被禁用,默认状态下是被禁用,Issue中内置大量值得称道的功能,但最重要的功能之一在与其与pull request 的整合,用户只需在提交消息中加入issue的数字ID,即可轻松在所提交中罗列该issue作为参考,例如:
git commit -am "Adding a info; fix #3"
这条消息在关联pull request 被接受后自动标记为3号issue。