官方文档:https://gitee.com/help/articles/4238#article-header0
目录
- 一、通过 https / ssh 协议推拉代码
- 二、通过 https 推拉代码但是存在多个账号的问题
- 三、通过 ssh 推拉代码
- 四、Git配置多个SSH-Key
- 五、TortoiseGit客户端
一、通过 https / ssh 协议推拉代码
目前 Gitee 支持使用 HTTPS协议 和 ssh 协议 进行代码的推送/拉取。两种协议的差别仅在于同一个仓库使用不同协议时的地址不同,以及对应的授权实现不同。
以仓库 https://gitee.com/normalcoder/Gitee-Blog-Applets 为例,对应两种协议的远程仓库地址(remote)如下:
- https协议:https://gitee.com/normalcoder/Gitee-Blog-Applets.git
- ssh协议:git@gitee.com:normalcoder/Gitee-Blog-Applets.git
https 协议 和 ssh 协议在使用上的差别
- 使用 https 协议 克隆 对初学者来说会比较方便 ,复制 https url 然后到 git Bash 里面直接用 clone命令克隆到本地就好了,如果是私有仓库clone是需要输入账号密码的,第一次输入过后以后拉代码就不需要输入了,他会将账号密码存入到电脑的凭据当中。
假如密码有修改,在凭据管理可直接更新。这里存在一个问题,网址他写的是gitee的网址,而并不是针对这个仓库下的用户信息,假如一旦我gitee有多个账号,这就比较麻烦了,针对于这个问题下面会细讲!
- 而使用 SSH 协议 克隆需要在克隆之前先配置和添加好 SSH key,因此, 如果用户想要使用 SSH url克隆的话,必须是这个仓库的拥有者 。
二、通过 https 推拉代码但是存在多个账号的问题
现在有个这个场景:我有我自己的gitee账号,然后公司又给分了一个gitee账号,然后我在电脑已经保存了自己gitee的凭证,这时候又想去拉公司账号下的代码这时候会发现异常了,因为他会认为账号密码不对,而且并没有弹出让你输入账号密码的框框。
现在有一种方案就是修改凭据当中的账号密码。但是这时候再去拉另一个仓库的就又会出现同样的问题,这里就存在一个互斥的问题。怎么让他保存两个凭据?
我们可以这样,一个采用https,一个采用ssh,这样就互相不冲突了。
三、通过 ssh 推拉代码
验证原理:
SSH登录安全性由非对称加密保证,产生密钥时,一次产生两个密钥,一个公钥,一个私钥,在git中一般命名为id_rsa.pub, id_rsa。
那么如何使用生成的一个私钥一个公钥进行验证呢?
- 本地生成一个密钥对,其中公钥放到远程主机,私钥保存在本地
- 当本地主机需要登录远程主机时,本地主机向远程主机发送一个登录请求,远程收到消息后,返回一个随机生成的字符串,本地拿到该字符串,用存放在本地的私钥进行加密,再次发送到远程,远程用之前存放在远程的公钥对本地发送过来加密过的字符串进行解密,如果解密后与源字符串等同,则认证成功。
gitee将SSH分为了仓库的 SSH Key 和账户 SSH Key
仓库的SSH Key只能拉取当前仓库的代码,而账户的 SSH Key同时具备推送/拉取的权限,对用户创建/参与的仓库均能使用,使用起来更加方便。
官网生成公钥教程:https://gitee.com/help/articles/4181#article-header0
- 在终端输入:
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
,然后一路Enter,注意:这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。
- 生成过后会存放到C:\Users\当前电脑用户名.ssh文件夹下
- 将公钥添加到gitee当中,可以使用到具体仓库,也可以使用到该账户下
- 添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
,首次使用需要确认并添加主机到本机SSH可信列表。
- 这时候就可以通过gitee当中的ssh连接进行克隆代码了!
四、Git配置多个SSH-Key
https://gitee.com/help/articles/4229#article-header0
五、TortoiseGit客户端
TortoiseGit他属于git的客户端,可有可无,说白了就是将git命令给我们整理成了可直接操作的按钮。
在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用。拉代码的方式是SSH-Key,而并非https。出现如下异常,可以看这一篇文章:https://blog.csdn.net/weixin_43888891/article/details/130474937