GitHub
该网站就是提供Git仓库托管服务的
只要注册一个GitHub账号, 就可以免费获得Git远程仓库
SSH
说明
本地Git仓库 和 GitHub仓库 之间的传输是通过SSH加密的
步骤
1. 创建 SSH key
$ pwd
/e/git_repository
$ ssh-keygen -t rsa -C "wuqinfei_cs@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Created directory '/c/Users/Administrator/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
65:98:a1:1e:ff:b4:15:c8:82:0b:73:db:79:0d:5d:82 wuqinfei_cs@163.com
The key's randomart image is:
+--[ RSA 2048]----+
+-----------------+
$ pwd
/c/Users/Administrator/.ssh
$ ls -a
. .. id_rsa id_rsa.pub
id_rsa
是私钥,不能泄露出去
id_rsa.pub
是公钥,可以放心地告诉任何人
2. 在GitHub账号设置里添加公钥
参考
https://help.github.com/articles/generating-ssh-keys/
示例
$ cd /c/Users/Administrator/.ssh
$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFgj3p1HlJT1hFxQnW5VVUux4XHFT/3egTxTcQsjKK
KJTy/6guKj2hNb4tlPjcskkIzZ+t7sL34vL+6i0r8msdHmNo3PMFSKT2mo1NHEn2Dsli6RTa+j8NToL4
ent4/4RbYuGIMeZGeLiwnecX0jvzv7xw6RHoRv/BpZJwenlNWd/fMlJE6E9znBOmMUjCBNQG9RVvCeLz
meFM+Zb/wt96lwt+92ovdzSMPaYerN1mcR3L2JfVdckI5PigT+BombzgsdImp6uf4n1zmJ6c+Zf98jyd
OPVP8warsvJ8nDqAdpvEI5AMh2VLE3/8yEWb/ow8JUHksKI7pFLFZJB6qKDD wuqinfei_cs@163.com
填公钥
注意
用谷歌浏览器
GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,
而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
GitHub允许你添加多个Key。
添加远程仓库
场景
在本地有一个Git仓库, 在GitHub上创建一个Git仓库, 让两个仓库进行远程同步
GitHub上的仓库既可以作为备份, 也可以让其他人通过该仓库来协作
步骤
在GitHub上新建空仓库
本地Git库与GitHub上的库关联起来
命令
git remote add origin https://github.com/forwardNow/git_repo.git
示例
$ cd /e/git_repository/
$ git remote add origin https://github.com/forwardNow/git_repo.git
将本地Git库的master分支所有内容推送到GitHub
命令
$ git push -u origin master
说明
-u
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,
Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,
在以后的推送或者拉取时就可以简化命令。
origin
远程库的名字,这是Git默认的叫法,也可以改成别的,
但是origin这个名字一看就知道是远程库。
示例
$ git push -u origin master
Username for 'https://github.com': forwardNow
Password for 'https://forwardNow@github.com':
Counting objects: 12, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (12/12), 948 bytes | 0 bytes/s, done.
Total 12 (delta 1), reused 0 (delta 0)
To https://github.com/forwardNow/git_repo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
从远程库克隆
说明
一般的开发流程是 先创建远程库, 然后 从远程库克隆.
示例
新建远程仓库
克隆地址
https://github.com/forwardNow/remote_repo.git
git@github.com:forwardNow/remote_repo.git
说明
默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令
但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
https 与 ssh
HTTPS
Hyper Text Transfer Protocol over Secure Socket Layer
是以安全为目标的HTTP通道,简单讲是HTTP的安全版
HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
SSL 全称安全套接层协议( Secure Sockets Layer)
HTTPS和HTTP的区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
SSH
Secure Shell
SSH 为建立在应用层和传输层基础上的安全协议
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议
SSH提供两种级别的安全验证
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机
所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。
可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上
如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证
服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较
如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件
客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
克隆
$ cd /e
$ pwd
/e
$ git clone git@github.com:forwardNow/remote_repo.git
Cloning into 'remote_repo'...
remote: Counting objects: 3, done.
Receiv
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
$ cd remote_repo/
$ ls
README.md
总结
$ ssh-keygen -t rsa -C "wuqinfei_cs@163.com"
将id_rsa.pub的内容复制到GitHub的SSHkeys
git remote add origin https://github.com/forwardNow/git_repo.git
$ git push -u origin master
git push origin master
add
commit
push