2015年4月21日星期二

Git_006:学习笔记之六:远程仓库 (摘录+整理)

GitHub网站提供Git仓库托管服务的,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

1. 注册GitHub
(1)创建SSH Key。
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。
如果没有,执行 $ ssh-keygen -t rsa -C “maping930883@hotmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/maping/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/maping/.ssh/id_rsa.
Your public key has been saved in /Users/maping/.ssh/id_rsa.pub.
The key fingerprint is:
18:7c:99:d1:af:0d:23:2b:24:ef:78:b4:01:e3:aa:6a maping930883@hotmail.com
The key's randomart image is:
+--[ RSA 2048]----+
|        ..       |
|     .   +.      |
|      o +  .     |
|    + .+. o .    |
|   . *. So =     |
|    . = . . .    |
|   . + +         |
| E. . +          |
|=.   .           |
+-----------------+

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
(2)登陆GitHub
点击右上的齿轮图标,选择“Settings”,然后点击页面左边的“SSH Keys”,接着把id_rsa.pub内容复制到Key中,Title可以随便命名。

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而且Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
在GitHub上免费托管的Git仓库,任何人都可以看到,但只有你自己才能改,所以,不要把敏感信息放进去。
 2. 添加远程库
现在的情况是,你已经在本地创建了一个Git仓库:learngit,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
(1)登陆GitHub
点击右上角“+”号,选择“Create New…”,然后如下图操作。

在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。

目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

$ git remote add origin git@github.com:maping/learngit.git

注意,这里要替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步,就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
The authenticity of host 'github.com (192.30.252.130)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of known hosts.
Counting objects: 23, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (23/23), 1.91 KiB | 0 bytes/s, done.
Total 23 (delta 7), reused 0 (delta 0)
To git@github.com:maping/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。


从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

3. 从远程库克隆
添加远程库讲的是先有本地库,后有远程库的情况下如何关联远程库。
其实比较好的方式是先创建远程库,然后从远程库克隆。
首先,登陆GitHub,创建一个新的仓库,名字叫gitskills:


勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件。

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:
$ git clone git@github.com:maping/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了。
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。
你也许注意到GitHub给出的地址不止一个,还可以用https://github.com/maping/gitskills.git这样的地址。
实际上,Git支持多种协议,默认的git://使用ssh协议,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

没有评论: