Github可以免费帮我们托管项目,方便我们对版本的控制
远程仓库
在上一篇文章-GitHub 快速入门-Git教程中我已经介绍了Git的基本使用方法。接下来我们就开始远程仓库之旅了,首先我们在GitHub上创建一个远程仓库,然后把远程仓库和本地仓库关联起来,连接的方式有很多,可以参考书籍《Pro Git》中的介绍,其中用的最多的是SSH协议,和Http/S协议。其中两者的区别是,SSH通过配置SSH key来连接远程仓库,并且每次可以不输入密码,传输效率高。Https方式的话,可以直接从远程仓库clone项目到本地,但每次要输入密码,方便使用但麻烦,所以我们直接用SSH的方式。
-
The Connect way of SSH
-
SSH建立在应用层和传输层基础上的安全协议,可以有效防止远程管理 过程中的信息泄露问题
cd ~/.ssh ls
检查本地是否存在ssh的两个密匙文件-id_rsa.pub和id_dsa.pub。其中 id_rsa是私钥,id_rsa.pub是公钥,私匙需要保密,公钥我们可以设置给远程仓库。
-
如果没有,则创建一个SSH key,在git bash下执行如下命令:
ssh-keygen -t rsa -C "input your email"
其中-t指定密钥类型,默认是rsa。 -C设置注释讯息。
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/JIANLAM/.ssh/id_rsa): [Press enter] 弹出以上讯息,保存在默认地址上,回车即可。接着它要求你输入密码 (提交项目到远程仓库的密码),建议大家直接回车就好,不用设置密码。 方便快捷,而且本来就够安全了。
-
-
接着我们打开GitHub页面,在你的账户里面设置你的SSH key,点击setting->SSH and GPG keys,把公匙里面的长窜码添加进去,再取个名字就行了。
-
Our First Remote Repository
-
连接搭建好以后,我们就来创建第一个远程仓库:
输入仓库的名称,看到下面有几种托管方式,其中私有的话是需要付款的,我们选择开源公共的就好。下面还有一个README.txt是一个类似使用手册的东西,里面写一些关于别人使用你这个项目之前需要注意,知道的东西。但我们若要提交项目到仓库去,先不选这个,因为会提示一些错误,需要做git pull之类的操作。
Incorporates changes from a remote repository into the current branch
git pull官方的解释是:把远程仓库的变化纳入到当前分支中。这样就可以解释为原本我们本地的仓库和远程仓库都是空的,现在加多了一个README.txt,两边不匹配,当然报错。
-
-
远程仓库与本地仓库的关联,执行以下命令:
$ git remote add origin git@github.com:JIANLAM/Plants-vs.Zombies.git
上面的命令可以看成
$ git remote add 远程仓库名 SSH:url
,远程仓库名是本地对远程端的一个命名,SSH地址在我们创建完远程仓库后,在GitHub的页面可以获得该地址。 -
把项目传送到远程仓库去(这里我上传一个植物大战僵尸的游戏)
git push -u origin master
这句命令就是把东西推送到远程仓库的master分支上,按英译中,很容易明白。那这个-u是什么意思呢?
So,What exactly does the "u" do?
Git官网 的说法是:
For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull[1] and other commands.
对于每一个更新了或推送成功的分支,添加一个追踪的参考源。好,大概明白,我们再来看看国外论坛Stack Overflow一位朋友的回答:
The key is "argument-less git-pull". When you do a git pull from a branch, without specifying a source remote or branch, git looks at the branch.<name>.merge setting to know where to pull from. git push -u sets this information for the branch you're pushing.
这个解释就有点像http协议是无状态的,不记录传输的信息,服务器端给客户端传一个cookie值,客户端保留cookie之后,下一次向服务器端获取东西的时候,就知道是哪个服务器了。我们给远程端一个-u标示,下一次想从远程仓库拉取消息的时候,系统就知道具体是从谁那拉取消息过来了。
可以试着不加-u看看效果如何:
$ git push origin master $ git pull You asked me to pull without telling me which branch you want to merge with, and 'branch.test.merge' in your configuration file does not tell me, either. Please specify which branch you want to use on the command line and try again (e.g. 'git pull <repository> <refspec>'). See git-pull(1) for details. 它说你并没有告诉我你想要合并的分支是哪个,配置文件也没有说明,请特殊化你的分支然后再试一次。之所以大费周章的说明这个-u,就是想再次告诉大家,遇到不懂得地方,如何自己弄明白它,学会自己查阅并参考一些国外的资料,是最快进步的方法。
-
拉取,下载,推送
克隆即下载,从远程仓库中下载项目到本地
$ git clone SSH:url
每次有更新就通过该方式推送到远程端。
$ git push 远程仓库 远程仓库分支
在协同项目中,我们是一起完成一个任务的,即多人从远程仓库中获取项目,提交项目。如果远程端和自己的本地版本不同的时候,我们可用fetch,来更新自己本地没有的东西:
$ git fetch origin master
可以用pull,从远程仓库中获取最新的版本:
$ git pull origin master
-
The Explanation Of GitHub`website
我们把GitHub的网页界面栏分为五个部分如下:
-
第一部分
左边显示项目名,右边有3个tab,分别是Watch,Star,Fork.
watch就是关注项目的动态,只要一有更新,就会马上通知你。Star 即收藏,喜欢的功能。Fork顾名思义分叉,即拷贝一个到自己的账户中变成自己的项目。 -
第二部分
<>Code即为当前的项目代码。Issues 就是你需要别人帮助的问题,你可以再这里提出来,请求别人帮助你一起完成。比如在我提交的这个项目中,还没有设计太阳花的代码,但是我又不知道从何下手,这个时候我就可以询问别人,在new issues里填写我的问题,旁边还有对应问题分类的标签,帮助我们区别。这里太阳花应该是个扩展的功能,所以我选择enhancement。
pull requests 你可以请求作者是否合并你做出的修改,如果项目作者同意了,你就为了项目的贡献者了。Wiki即为你的项目展示,你可以在这里说明并介绍你的项目。 Graphs是贡献与时间的分析图表,Setting顾名思义对项目的设置。 -
第三部分
可以说是个性签名,一句话介绍你的项目,右边Edit可以编辑。 -
第四部分
commits这个非常熟悉了,提交的记录都在这里。 branch 分支,release
最终发布给用户的版本。 contributor 对该项目的贡献者。 -
第五部分
最右的Branch:Master 我们可以选择分支,创建分支,还可以设置标签。
New pull requests 可以比较不同分支的差异。最右的就是下载项目到本地了。
-
How To Use GitHub Desktop
我们前面已经了解了Git的一些基本用法,知道了合并分支,如何与远程端交互,在接下来要使用的这个工具中,我们完全不需要这些命令行的操作,但是只有当我们理解了这些用法,在每一步的点击的背后,才能清楚的知道自己究竟做了些什么。
-
下载与安装
-
界面介绍
咋一看界面,还是有不少熟悉的地方,现在已经不那么陌生了对吗。首先左边GitHUb下面的一列都是我已经clone也就是下载到本地的项目。上面的Y字图案master我们也很熟悉了,就是主分支嘛,下拉的时候还能选择其他的分支。最右边的pull request已经说了,就是请求合并到主分支的跟新,隔壁还有个设置,可以自行研究。下面黑色的我们也熟悉啊,在上一篇的Git的使用中,我们画了许多图,特别是在分支那块,用图形描述了代码的交互,这里其实就是帮我们画图了,告诉我们在什么分支上做了什么。接下来让我们动态来看看都是怎么使用的。
-
clone下载
一般的对于自己感兴趣的项目(fork它之后),或是已经上传到自己账户的项目。我们都会在加号的clone的下面看到。
点击想要下载的项目,并选择好存放的项目之后,我们就可以在刚刚的GitHub列表看到它了。
-
提交,协同
这里我选择植物大战僵尸这个项目,并且决定添加一个太阳花的实现方法。用自己熟悉的编译器编译好这个代码之后。我们立刻发现仓库提醒我们有了改变,我们在左下角添加Summary标签描述,并提交。其实就是对应我们命令操作
&git commit -m""
想起来了吗。
在我门的History中我们其实相当于用了命令&git diff
,查看自己究竟做了哪些修改。减号是修改前,加号为修改后。
[站外图片上传中……(12)]
检查没有什么错误之后,最后只要在按一个Sync同步按钮,大功告成!我们的修改就协同到远程仓库了,我们去网页上看看是否真的上传了。
[站外图片上传中……(13)]
果然成功了,这里顺便推荐一个Chrome的插件,名叫Octotree是一个可以分级显示我们项目文件的开源项目。
5.分支
如果你要在分支上完成任务,确定妥当之后再合并到主分支上,聪明的你当然知道,在Y型图标中创建一个分支叫dev,然后切换到该分支中进行修改提交(相当于`&git checkout -b dev`)现在我随便做一个修改并且提交:
![](https://img.haomeiwen.com/i1887988/396cd64778582863.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
由图我们可以看到Master分支下面多了一个dev分支,并且从Master分支连接到了dev分支,同时也确实进行了修改。如果我觉得确实这个修改非常好,决定引入到我的主分支中。可以点击**pull request**
然后可以向主分支提出合并的请求,这里就非常形象了,我们看到刚刚停留在dev的线立马呈现上升的趋势了。发送之后我们只需切回到主分支接受这个请求就可以啦。要注意的是dev分支修改若不合并,当然不会影响主分支的内容。如果没有需要了,我们还可以设置中手动删除这个分支。
下面有一个博客连接,那个也是用GitHub与Hexo开源框架搭建而成的哦,有兴趣的朋友可以去玩玩看!
-
Thanks for you coming
写到最后,才深知写作不容易。很多人都说,自己都知道了,干嘛还要写下来?我想说,写作不但是为了自己,还有为了那些想了解这个世界的人。我们所了解的所有,不都是许许多多的人一起努力记录下来的成果吗。所以你们就是我写作的动力,希望可以继续支持我!祝学习愉快~
GitHub: https://github.com/JIANLAM
新浪微博: http://weibo.com/fc7jian
原文地址博客: http://jianlam.github.io/
网友评论