Git 的 HTTPS 和 SSH 方式的区别和使用
Git 有两种远程仓库与本地仓库之间 push/clone/pull 等操作的验证模式。一种是 HTTPS 模式,另一种是 SSH 模式。
本文主要讲述这两种模式的区别以及使用方式。
HTTPS协议模式
相对于 SSH
模式,HTTPS 对于新手来说更友好,假设我要 clone 一个项目,直接在clone
后跟上链接即可:
git clone https://github.com/qianfanguojin/compare.git |
但是,方便的同时也会产生一些麻烦,当我们在进行push/pul
l操作时,每次都要输入账号密码。
当然,很多时候我们好像就是只输入了一次,后面也不需要输入了,但其实只是 Windows 操作系统帮我们记录在了 Windows凭据 中,每次我们执行操作的时候,Windows 都自动帮你填写好账号密码:
此时我们执行 push
操作,可以看到:
没有提示输入账号密码,直接推送成功。
但当我删除Windows凭据中的内容:
我再次执行推送,发现弹出输入账号密码的输入窗口:
想要了解更多关于 Git 凭据的信息,可以参考官方文档 Git 工具 - 凭证存储
综上,我们可知,HTTPS 方式在 Git 执行操作时每次都要账号密码验证,但是得益于凭据管理模式,使用起来也方便许多,但当我们在多台电脑上运行操作我们的项目时,每次都要输入账号密码,就会非常的麻烦。
SSH 协议模式
根据 Git 的官方文档 服务器上的 Git - 协议 ,SSH 在 Git 中的使用具有架设简单、高效、方便管理优点,但 SSH 的缺点在于你不能通过它进行匿名访问,即便是只要读取数据,使用者也要有通过 SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。
这里我教大家如何使用SSH
来操作。
1.确认自己电脑是否拥有SSH密钥:
cd ~/.ssh |
默认情况下,用户的SSH密钥都存储在~/.ssh
目录下,也就是用户根目录下的.ssh
文件夹中,我们需要寻找一对以 id_dsa
或 id_rsa
命名的文件,其中一个带有 .pub
扩展名。
.pub
文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 .ssh
目录)No such file or directory
表示文件夹不存在,则表示没有密钥,我们需要自己创建。
2.生成 SSH 密钥
在命令行下(cmd 或是 Git bash)我们可以通过 ssh-keygen
命令创建:
ssh-keygen |
当然,为了使生成的SSH密钥更清楚明了,还可以添加一些附加控制命令
ssh-keygen -t rsa -C "你的email地址" |
其中:
-t 指明密钥类型,默认为 rsa,可省略。
-c 指明注释文字,如邮箱,会显示在你生成的 id_rsa
文件内容最下方。
-f 指定密钥文件存储的文件名字
可以看到,我们使用不带任何参数方法创建时,首先 ssh-keygen
会确认密钥的存储位置,如你没有指定,则它使用默认的目录(默认是 .ssh/id_rsa
)。
然后会要求你输入两次密钥口令,口令的作用即是一个密码,即当你使用密钥时需要输入该口令,如果你不想在使用密钥时输入口令,将其留空即可。
3.将SSH密钥添加到服务器
不同的 Git 服务器添加操作区域不一样,这里我以 Github 为例。
点击右上角个人头像,从下拉框中进入Setting:
然后进入SSH and GPG Keys设置:
然后按照下图操作:
4.利用SSH密钥推送
由于我们先前使用的远程关联方式是 HTTPS 链接,所以我们先将远程关联信息删除。
git remote remove origin |
然后添加 SSH 链接的远程关联信息
git remote add origin "你的远程仓库SSH链接" |
将 master 本地分支推送到远程默认分支
git push --set-upstream origin master |
参考链接:
https://blog.csdn.net/duzilonglove/article/details/79415628
保姆级教程,教你使用Git推送你的项目到Github_千帆过烬的博客小站-CSDN博客