文章目录
1、HTTPS协议和SSH协议的区别
git中最常用的传输的协议是HTTPS()协议和SSH协议
1-1、优缺点
HTTPS:
- 一般使用443端口;
- 速度相对快点;
- 通过用户名/密码授权,可用性比较高;
SSH:
- 一般使用22端口;
- 传输相对慢点;
- 现在本地生成的SSH密钥对,再把公钥上传到服务器;
一般的防火墙会打开80和443两个https协议端口 ,一般企业防火墙会打开80和443这两个http/https协议的端口,因此在架设了企业防火墙的时候使用http就可以很好的绕开安全限制使用git了,很方便;而对于ssh来说,企业防火墙很可能没打开22端口。
1-2、使用区别
clone项目:
- 使用https协议:首次需要在本地电脑上生成ssh密钥对,然后上传服务器(github或者gitee);
- 使用ssh协议:可以直接克隆下来;
push项目:
- 使用https协议:首次push代码,会弹出git授权凭据管理器的窗口,授权后以后提交就不需要其他操作,直接git push;
- 使用ssh协议:首次需要在本地电脑上生成ssh密钥对,然后上传服务器(github或者gitee);
总结:
HTTPS利于匿名访问,适合开源项目,可以方便被别人克隆和读取(但没有push权限);
SSH不利于匿名访问,比较适合内部项目,只要配置了SSH公钥极可自由实现clone和push操作。
2、HTTPS协议的使用:
2-1、所用到的场景
1、git clone < url >
2、git remote add <重命名> < url >
- git clone :是整个复制远程代码库,不用git init操作,也不用git remote add命令去添加本地库与远程库的连接;
(clone下来默认远程仓库名origin)
- git remote add命令是在本地用git init命令初始化一个空的本地库,这个本地库改动的文件如果要push到远程仓库,那就要先运行git remote add命令先添加本地与远程库的连接;
- git pull:
- git push:第一次push,会弹出让登录github账号,然后授权git凭据管理器的操作;后面的提交就不用做其他操作了;
2-2、HTTPS协议保存凭证信息:
HTTPS协议在第一次操作的时候会弹出登录github账号和授权git凭证管理器的操作,然后后续的操作就无需每次都授权了,这是因为在本地电脑上面保存了授权的信息:
1、win+r 输入control快捷打开控制面板
2、用户账户
3、凭证管理器
4、windows凭证
可以看到git:https://github.com,打开详细信息还可以编辑,要是github的密码有修改,可以修改这里,免得授权失败;
3、SSH协议的使用:
2-1、配置git的ssh密钥:
2-1-1、设置用户名和邮箱
配置用户名和邮箱,配置这个用户名是用来标识是哪个用户提交代码的,所以是必须设置的一个步骤:
git config user.name 用户名(不能是中文)
git config user.email 邮箱地址
=====(加–global 表示的是配置全局,即本机)
git config --global user.name 用户名(不能用中文)
git config --global user.email 邮箱地址
如上命令所示,正常配置都是配置–global即全局,否则配置的用户签名仅作用于本项目,存在当前项目的./.git/config 文件中,下一个项目就没有用户签名了;
2-1-2、生成密钥:
命令:
ssh-keygen -t rsa -C <配置用户签名和邮箱中的邮箱名>
输入设置好的用户签名的邮箱运行,然后回车三下(这里不设置密码,直接回车就行)
复制本地生成的公钥:
生成的私钥和公钥在C:\Users\ZCQ.ssh目录下,在bash中cd ~/.ssh 去查看公钥,复制到服务器中
2-1-3、将密钥的公钥配置到git服务器上面
复制到服务器:
1、登录到github
2、点击头像,选择settings
3、选SSH and GPG keys -> New SSH key
4、 分别填好title和粘贴~/.ssh/di_rsa.pub中内容
完成,接下来就可以用ssh协议本地与远程库链接
验证一下:
提示了this key is not known by any other names…
问题是在~/.ssh文件夹中没有known_hosts和known_hosts.old
这两个文件,
解决: 在后续直接输入yes,自己会创建这两个文件,且后面再执行git clone不会再出现这个问题;
2-2、所用到的场景
1、git clone
2、git remote add <重命名>
- git clone
- git remote add
- git pull
- git push
注:第一次推送需要本地生成ssh密钥,在服务器上添加;后面可以直接推送到远程仓库;这一点和https操作不同,其他都一样;