Git大法好——4.Github作为远程仓库的使用详解
标签: Git
引言
首先我们先来回顾一下之前的三节我们都学了些什么:
第一节:Git的引入以及关于Git的一些概念,让我们对Git有了一个基本的认识;
第二节:Git的本地操作指令详解,熟悉了一波Git本地操作的指令;
第三节:Git的分支操作,包括分支的创建,切换,处理冲突,合并;
假如学完前面三节,大家后面又自己撸了几次指令,相信应该就有信手拈来的感觉了!
第一节中我们说Git由:工作空间,暂存区,本地仓库和远程仓库这四个部分组成,
前三个部分我们都有涉猎,所以本节讲解的是远程仓库部分的内容!
其实远程仓库也没你想象的那么复杂,可以理解成只是把本地仓库丢到了某个
服务器上,然后别人把你的仓库clone(克隆)或者说拷贝下来而已!又或者说是
多人协作时,各个人本地仓库更改整合的一个媒介而已!
说回这个远程仓库,你可以自己搞台服务器,然后自己搭建,也可以将项目托管
到代码托管网站,比如Github,GitCafe,Git@OSC,GitLab,coding.net等。
选哪个其实都差不多,都是用来托管代码的而已,下面简单介绍下这几个吧:
-
Github:是最大的代码托管网站,大部分的开发者都喜欢使用这个,但是开源项
目不收费,而私有项目是要交"保护费"的,而且Github服务器毕竟在国外,国内访
问可能会有些缓慢! -
GitCafe:同样私有仓库收保护费,开源仓库免费,但是相比起github有点坑,而且
是不时会挂掉,不是很推荐... - Git@OSC:开源中国社区的,仓库免费,不过协作功能还没有完全体现。
-
GitLab:开源的版本管理系统,可以安装Gitlab CE源码,自己搭服务器;也可以使
用GitLab EE企业版,GitLab可以配合着其他IM工作使用,比如我司用的瀑布IM,当有人
推送更新的时候收到推送信息等! -
coding.net:国内体验最接近Github的产品,有免费版和开发版,高级版,内容可
自行到官网查看。
好的,最后我们还是选择GitHub作为我们的远程仓库,原因就不多说了。
1.Github账号注册与创建新仓库
注册Github账号:
- 打开注册链接:https://github.com/join
- 依次填写注册相关信息:用户呢称,邮箱,密码,填写完毕后点击Create an account
- 打开注册邮箱,打开收到的验证邮件,点击完成账号验证
- 点击右上角的"Sign in"输入你刚注册的注册邮箱和密码,登陆Github。
创建新仓库:
-
点击右上角,创建一个新仓库
- 接着依次填写:Repository name(仓库名称),Description(描述信息,可写可不写),
选择Public仓库,勾选Initialize this repository with a README,自动创建一个README.md
文件,点击Create repository创建一个仓库。
2.把本地仓库推送到新仓库
这里我们在Android Studio创建一个新的项目,然后来到项目所在的位置,右键git bash,
键入:git init将这个项目变成带有git仓库的项目,这里我们拷贝下Github那里我们这个
仓库的地址:
git remote add origin https://github.com/coder-pig/SimpleTea.git
指定完远程主机后,我们可以直接键入git remote来查看,或者加上-v:
接着我们键入下述命令把我们的仓库push到github上,这里的-u参数作为第一次提交使用,
作用是把本地master分支和远程master分支关联起来(设置默认远程主机),后续提交不需要这
个参数!
git push -u origin master
这时候打开我们的GitHub就可以看到我们的项目已经成功push上来了!
这里我们是通过git remote来设置远程仓库地址的,假如你想修改远程仓库地址,
比如你把仓库托管换成了Git@OSC,你需要修改远程地址,可以键入:
git remote set-url origin xxxx
来修改远程地址,你也可以先删除origin然后再添加:
git remote rm origin
git remote add origin https://github.com/coder-pig/SimpleTea.git
还可以直接修改.git文件夹里的config文件,直接替换圈住位置:
另外,这个origin不是什么固定的东西,这个只是我们后面那个仓库地址的一个别名!!!
你可以写成其他的东西,比如我的项目既托管在Github又托管在Git@OSC,我可这样设置:
git remote add github https://github.com/coder-pig/SimpleTea.git
git remote add osc git@git.oschina.net:coder-pig/SimpleTea.git
这一点要弄清楚!!!
3.为项目添加SSH Key免去提交输入账号密码的麻烦
不知道细心的你有没有发现,仓库地址除了Https外,还有一个SSH,这里我们简单介绍下
两者的区别,第一点:使用Https url可以任意克隆Github上的项目;而是用SSH url
克隆的话,你必须是项目的拥有者或管理员,而且还要添加SSH Key,否则会无法克隆。
还有一点是,Https每次push都需要输入用户名和密码,而使用SSH则不需要输入用户名
如果配置SSH Key时设置了密码,则需要输入密码,否则直接git push就可以了!
另外,SSH,Secure shell(安全外壳协议),专为远程登陆会话与其他网络服务提供安全性
的协议, 而SSH传输的数据是可以经过压缩的,可以加快传输的速度,出于安全性与速度,
我们优先考虑使用SSH协议,而SSH的安全验证规则又分为基于密码和基于密钥两种!
我们这里用的是基于第二种的,即在本地创建一对密钥,公钥(id_rsa.pub)和私钥(id_rsa),
然后把公钥的内容贴到Github账号的ssh keys中,这样就建立了本地和远程的认证关系,
当我们再push到远程仓库,会将你本地的公共密钥与服务器的进行匹配,如果一致验证通过
直接推送更新!
下面我们来建立ssh key,首先来到电脑的根目录下,这里假定我们没创建过SSH key:
执行完ssh-keygen那个指令后,后面依次要你输入文件名,直接回车会生成两个默认的
秘钥文件,接着提示输入密码,直接回车,如果这里你输入密码了的话,那么push的时
候你还是需要输入密码,接着又输多一次密码,同样回车,然后出现最下面的这串东西
就说明ssh key已经创建成功了!
我们接着可以用编辑器打开id_rsa.pub文件或者键入:
clip <id_rsa.pub
复制文件内容,然后打开Github,点击你的头像,选择:Settings,然后点击左侧SSH Keys,
然后New SSH Key
然后Github会给你发来一个提示创建了一个新ssh key的邮件,无视就好,接下来我们可以
键入:ssh -T 779878443@qq.com,后面的是你的注册邮箱,然后如果你上面设置过
密码则需要输入密码,否则直接输入yes然后一直按回车就好!,最后出现Hi xxx那句话
就说明ssh key配置成功了!
内容参考:https://help.github.com/articles/generating-an-ssh-key/
4..gitignore文件的编写
我们在Push项目的时候,可能会有一些无关的东西,不需要传到远程仓库,我们可
以在项目目录下新增一个.gitignore文件,然后写上不想提交的目录,支持通配符,
比如笔者常用的android studio中的.gitignore的文件内容:
*.DS_Store
# Gradle files
build/
.gradle/
*/build/
# IDEA
*.iml
.idea/.name
.idea/encodings.xml
.idea/inspectionProfiles/Project_Default.xml
.idea/inspectionProfiles/profiles_settings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/vcs.xml
.idea/workspace.xml
.idea/libraries
# Built application files
*.apk
*.ap_
# Files for the Dalvik VM
*.dex
# Java class files
*.class
# Generated files
antLauncher/bin
antLauncher/gen
# Local configuration file (sdk path, etc)
local.properties
# Log Files
*.log
你可以根据自己的需求来编写,另外提供一个github上的一个.gitignore的模板的库,
要什么项目的可以来这里直接找:https://github.com/github/gitignore。
5.同步远程服务器更新(fetch VS pull)
现在我们知道可以remote设置远程仓库地址,push推送更新到远程服务器,clone克隆远程
仓库,接着就到本地仓库同步远程仓库了,关于获取远程服务器更新的方式有两种,他们
分别是fetch和pull,尽管都可以获取远程服务器更新,但是两者却又是不一样的。
首先说下fetch吧,仅仅只是从远处服务器获取到最新版本到本地,假如你不去合并(merge)
的话,本地工作空间是不会发生变化的!这里我们在Github上创建一个README.md文件
而是用pull确是一步到位的,或者说:pull = fetch + merge!这里我们
先改下Github上README.md的内容!
好的,区别很显而易见,实际使用中,使用git fetch显得更安全一点,至少在merge
之前我们可以查看更新情况,再决定是否进行合并;而笔者实际开发中用pull
用得较多,主要是懒,哈哈,至于用哪个,见仁见智吧!
6.Github客户端介绍
其实,安装好Git后,就一有一个Git Gui的东东了,就可以直接用有用户界面的
Git来做版本管理的工作了,而Github客户端则是Github给我们提供的一个专门用来
管理Github项目的一个工具而已。比如,假如你装了Github客户端,在Clone项目
的时候,你只需点击:
就能直接把项目clone下来,就是一些Git操作的图形化罢了,首先来到下面的链接
下载Github客户端:https://desktop.github.com/
文件很小,后面点击运行文件后,他还要在线下载安装,100多m,然后傻瓜式安装,
安装完成后,会自动打开Github客户端,然后使用你的Github账号登陆,接着他会
默认为你创建SSH Key信息,接着的你自己摸索了!
这里另外补充一点,就是win 8.1装Github客户端的问题,昨晚安装的时候一直
报这个错误:
直接,win + x,选择"命令行提示符(管理员)",执行以下下面的这个指令:
%SYSTEMROOT%\SYSTEM32\REGSVR32.EXE %SYSTEMROOT%\SYSTEM32\WUAUENG.DLL
然后再点击Github的安装程序,等待安装完成即可,下载并不需梯子。
7.如何删除Github上的仓库
点击进入你的仓库,点击Setting,拉到最后:
点击Delete this repository
弹出的对话框中输入要删除的仓库名称,接着点击删除
8.如何为开源项目贡献代码
你可以Clone别人的开源项目,在看别人代码的时候,你觉得作者有某些地方写得不好,
写错,或者你有更好的想法,你在本地修改后,想把修改push推送到开源项目上,
想法很好,但是你不是项目的拥有着和参与者,是无法推送更改的!!!这样是为了
避免熊孩子,毕竟熊孩子无处不在,参与开源项目的方法有两种:
第一种方法:
是让作者把你加为写作者,添加协作者流程:点击仓库的Settings
-->Collaborators然后输入想添加的人的用户名或者邮箱,点击添加即可。
第二种方法:
点击Fork按钮,把这个项目fork到自己的账号下,然后Clone到本地,然后
做你想做的修改,commit提交,然后push到自己账号里的仓库,然后打开开源
项目,点击
仓库,设置源分支,目标仓库与目标分支,然后还有pull request的标题和
描述信息,填写完毕后,确定,这个时候开源项目的作者就会收到一个pull
request的请求,由他来进行审核,作者审查完代码觉得没问题的话,他可以
点击一下merge按钮即可将这个pull request合并到自己的项目中,假如作者
发现了你代码中还有些bug,他可以通过Pull Request跟你说明,要修复了
xxBUG才允许合并,那么你再修改下BUG,提交,更改后的提交会进入Pull
Request,然后作者再审核这样!
PS:假如作者不关闭或者merge你的这个Pull Request,你可以一直commit
骚扰主项目...( ╯□╰ )
9.删除服务器上的无用分支
直接键入:
git push origin :无用分支名
10.一些补充
限于篇幅和水平显示,关于Github的介绍还有些遗漏,比如页面介绍或其他东东,
这里贴下一些相关的文章,可以看看,后续看到不错的文章会补上:
另外,再安利一个练习Git命令行很棒的一个开源项目:githug
通过闯关的形式让你熟悉Git命令的使用,总共有55个关卡,不过只能够在linux
系统上玩,因为安装游戏的指令就是:gem install github,关于通关攻略
网上有很多,这里贴下之前在简书上看到的一个:「Githug」Git 游戏通关流程
小结
本节给大家讲解了Github作为远程仓库的可能会遇到的问题,但还是记住:
远程仓库只是作为我们交换各自本地仓库的一个媒介罢了,我们可以换成其他
的仓库,换汤不换药,我们更应该关注的是本地仓库的操作以及多人协作时的工作流
程,下节我们通过简单的例子来阐述Git多人协作开发的流程,敬请期待!
——作者:coder-pig,本教程不收取任何费用,欢迎转载,转载请注明出处,尊重作者
劳动成果,请勿用于商业用途,侵权必究!