咱们一直用GitHub做为免费的远程仓库,若是是我的的开源项目,放到GitHub上是彻底没有问题的。其实GitHub仍是一个开源协做社区,经过GitHub,既可让别人参与你的开源项目,也能够参与别人的开源项目。git
在GitHub出现之前,开源项目开源容易,但让广大人民群众参与进来比较困难,由于要参与,就要提交代码,而给每一个想提交代码的群众都开一个帐号那是不现实的,所以,群众也仅限于报个bug,即便能改掉bug,也只能把diff文件用邮件发过去,很不方便。github
可是在GitHub上,利用Git极其强大的克隆和分支功能,广大人民群众真正能够第一次自由参与各类开源项目了。bootstrap
如何参与一个开源项目呢?好比人气极高的bootstrap项目,这是一个很是强大的CSS框架,你能够访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在本身的帐号下克隆了一个bootstrap仓库,而后,从本身的帐号下clone:框架
git clone git@github.com:michaelliao/bootstrap.git
必定要从本身的帐号下clone仓库,这样你才能推送修改。若是从bootstrap的做者的仓库地址git@github.com:twbs/bootstrap.git
克隆,由于没有权限,你将不能推送修改。ssh
Bootstrap的官方仓库twbs/bootstrap
、你在GitHub上克隆的仓库my/bootstrap
,以及你本身克隆到本地电脑的仓库,他们的关系就像下图显示的那样:分布式
若是你想修复bootstrap的一个bug,或者新增一个功能,马上就能够开始干活,干完后,往本身的仓库推送。学习
若是你但愿bootstrap的官方库能接受你的修改,你就能够在GitHub上发起一个pull request。固然,对方是否接受你的pull request就不必定了。fetch
若是你没能力修改bootstrap,但又想要试一把pull request,那就Fork一下个人仓库:https://github.com/michaelliao/learngit,建立一个your-github-id.txt
的文本文件,写点本身学习Git的心得,而后推送一个pull request给我,我会视心情而定是否接受。spa
在GitHub上,能够任意Fork开源仓库;
本身拥有Fork后的仓库的读写权限;
能够推送pull request给官方仓库来贡献代码。
使用GitHub时,国内的用户常常遇到的问题是访问速度太慢,有时候还会出现没法链接的状况(缘由你懂的)。
若是咱们但愿体验Git飞通常的速度,可使用国内的Git托管服务——码云(gitee.com)。
和GitHub相比,码云也提供免费的Git仓库。此外,还集成了代码质量检测、项目演示等功能。对于团队协做开发,码云还提供了项目管理、代码托管、文档管理的服务,5人如下小团队免费。
使用码云和使用GitHub相似,咱们在码云上注册帐号并登陆后,须要先上传本身的SSH公钥。选择右上角用户头像 -> 菜单“修改资料”,而后选择“SSH公钥”,填写一个便于识别的标题,而后把用户主目录下的.ssh/id_rsa.pub
文件的内容粘贴进去:
点击“肯定”便可完成并看到刚才添加的Key:
若是咱们已经有了一个本地的git仓库(例如,一个名为learngit的本地库),如何把它关联到码云的远程库上呢?
首先,咱们在码云上建立一个新的项目,选择右上角用户头像 -> 菜单“控制面板”,而后点击“建立项目”:
项目名称最好与本地库保持一致:
而后,咱们在本地库上使用命令git remote add
把它和码云的远程库关联:
git remote add origin git@gitee.com:liaoxuefeng/learngit.git
以后,就能够正常地用git push
和git pull
推送了!
若是在使用命令git remote add
时报错:
git remote add origin git@gitee.com:liaoxuefeng/learngit.git fatal: remote origin already exists.
这说明本地库已经关联了一个名叫origin
的远程库,此时,能够先用git remote -v
查看远程库信息:
git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push)
能够看到,本地库已经关联了origin
的远程库,而且,该远程库指向GitHub。
咱们能够删除已有的GitHub远程库:
git remote rm origin
再关联码云的远程库(注意路径中须要填写正确的用户名):
git remote add origin git@gitee.com:liaoxuefeng/learngit.git
此时,咱们再查看远程库信息:
git remote -v origin git@gitee.com:liaoxuefeng/learngit.git (fetch) origin git@gitee.com:liaoxuefeng/learngit.git (push)
如今能够看到,origin已经被关联到码云的远程库了。经过git push
命令就能够把本地库推送到Gitee上。
有的小伙伴又要问了,一个本地库能不能既关联GitHub,又关联码云呢?
答案是确定的,由于git自己是分布式版本控制系统,能够同步到另一个远程库,固然也能够同步到另外两个远程库。
使用多个远程库时,咱们要注意,git给远程库起的默认名称是origin
,若是有多个远程库,咱们须要用不一样的名称来标识不一样的远程库。
仍然以learngit
本地库为例,咱们先删除已关联的名为origin
的远程库:
git remote rm origin
而后,先关联GitHub的远程库:
git remote add github git@github.com:michaelliao/learngit.git
注意,远程库的名称叫github
,不叫origin
了。
接着,再关联码云的远程库:
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
一样注意,远程库的名称叫gitee
,不叫origin
。
如今,咱们用git remote -v
查看远程库信息,能够看到两个远程库:
git remote -v gitee git@gitee.com:liaoxuefeng/learngit.git (fetch) gitee git@gitee.com:liaoxuefeng/learngit.git (push) github git@github.com:michaelliao/learngit.git (fetch) github git@github.com:michaelliao/learngit.git (push)
若是要推送到GitHub,使用命令:
git push github master
若是要推送到码云,使用命令:
git push gitee master
这样一来,咱们的本地库就能够同时与多个远程库互相同步:
┌─────────┐ ┌─────────┐ │ GitHub │ │ Gitee │ └─────────┘ └─────────┘ ▲ ▲ └─────┬─────┘ │ ┌─────────────┐ │ Local Repo │ └─────────────┘
码云也一样提供了Pull request功能,可让其余小伙伴参与到开源项目中来。你能够经过Fork个人仓库:https://gitee.com/liaoxuefeng/learngit,建立一个your-gitee-id.txt
的文本文件, 写点本身学习Git的心得,而后推送一个pull request给我,这个仓库会在码云和GitHub作双向同步。