文章目录
一、一个本地库关联多个远程仓库
问题背景
当我们关联一个远程仓库代码时使用命令git remote add
报错:
git remote add origin git@github.com:jiubgsn/learngit.git
fatal: remote origin already exists.
这就说明本地仓库已经关联过一个名叫
origin
的远程仓库了。其中这里的‘git@github.com:jiubgsn/learngit.git
’是远程仓库的SSH地址。可以到远程仓库中复制。
此时可以使用命令git remote -v
查看远程仓库具体信息:
git remote -v
origin git@github.com:jiubgsn/learngit.git (fetch)
origin git@github.com:jiubgsn/learngit.git (push)
可以看到,本地库已经关联了指向GitHub的
origin
的远程库
如果你只想要替换远程仓库,只需要将旧远程删掉(git remote rm origin
),重新关联新远程即可。
但是如果想要同时关联两个远程仓库,则最好删除之前连接的旧远程仓库,重新关联两个远程,并分别命名。
关联多个远程仓库示例
先关联GitHub的远程库:
git remote add github git@github.com:jiubgsn/learngit.git
注意⚠️:远程库的名称叫github,不叫origin了。
接着,再关联Gitee的远程库:
git remote add gitee git@gitee.com:jiubgsn1/learngit.git
同样注意⚠️:远程库的名称叫gitee,不叫origin了。
关联了连个远程仓库后,再用git remote -v
查看远程库信息,可以看到两个远程库:
git remote -v
gitee git@gitee.com:jiubgsn1/learngit.git (fetch)
gitee git@gitee.com:jiubgsn1/learngit.git (push)
github git@github.com:jiubgsn/learngit.git (fetch)
github git@github.com:jiubgsn/learngit.git (push)
以上就完成了多个远程仓库的关联。
指定远程仓库推送
-
如果要推送到GitHub,使用命令:
git push github master
-
如果要推送到Gitee,使用命令:
git push gitee master
这样一来,本地库就可以同时与多个远程库互相同步了。
二、配置多帐户SSH免密登录
1.为什么配置SSH
-
如果不配置SSH,则每次同步远程代码都需要输入密码验证,繁琐而低效;
-
针对于Github,如果不配置SSH,则会有大文件大小限制,当超过限制大小,就会报错error54:
Git error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
对于如何配置SSH在Git 入门准备篇已有介绍,本文主要针对多帐户的SSH配置进行详细介绍。
2.多帐户配置SSH步骤
当下远程代码仓库有很多,比较流行的有Github/Gitlab/Gitee(国内)等等;有的时候可能要根据不同情况同时使用,像公司一般自己搭建GitLab,而个人一般使用GitHub/Gitee。这时候配置多帐户SSH免密登录就会很方便。
配置步骤一般为:
- 第一步:生成多对ssh 密钥时,分别取不同的名字,用来区分
- 第二步:在各个远程代码仓库平台各自进行远程git 配置 ssh 公钥。
- 第三步:配置SSH Config 文件。这个是重点。
- 第四步:将多个密钥加入钥匙串,然后分别测试是否配置成功。
主要介绍一下第三步内容。
3.配置SSH Config文件
什么是SSH?
SSH(Secure Shell)是一项创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境也是专为远程登录会话和其他网络服务提供安全性的协议。它能够有效防止远程管理过程中的信息泄露问题。通过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。
什么是SSH Config文件?
SSH config 是 Linux 系统下针对 SSH 客户端的一个参数配置方案,可以将一些关于 SSH 命令的参数放到配置文件中去,执行 SSh 命令的时候从文件中读取,简化命令行的操作。
SSH 的配置文件有两个:
$ ~/.ssh/config # 用户配置文件
$ /etc/ssh/ssh_config # 系统配置文件
配置内容
根据Git 入门准备篇中那样使用
ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f ~/.ssh/gitlab
配置多个名称的密钥对后,我们只需要配置"用户配置文件:~/.ssh/config
"就可以了。
在SSH用户配置文件~/.ssh/config
中指定对应服务所使用的公秘钥名称,如果没有config文件的话就新建一个(vim ~/.ssh/config or 手动创建)。
假设你已经创建了两个密钥对:github / github.pub
和 gitlab / gitlab.pub
,那么你的配置文件config中的内容可能如下所示:
# github
Host github.com
HostName github.com
User your_login_name
IdentityFile ~/.ssh/github
# gitlab
Host gitlab.xxx.com
HostName gitlab.xxx.com
User your_login_name
IdentityFile ~/.ssh/gitlab
配置参数说明:
- Host : HostName 的关键词,用于我们执行 SSH 命令的时候如何匹配到该配置,相当于一个别名,可以自己起,一般用来简化 HostName 。这里和 HostName 一致,是因为我没这个简化需求,再加上了解不深,保持一致,避免多事。
- HostName :真正连接的服务器地址,可以是IP,也可以是具体的域名
- User:用户名,可以自定义,提交的时候用户名会采用该用户名
- IdentityFile:指定本次连接使用的密钥文件
提醒⏰:ssh config的更多参数说明可以参考SSH Config 那些你所知道和不知道的事这篇博客。
连接测试
完成配置后,我们连接测试一下,看是否配置生效。
# 添加密钥到本地钥匙串
ssh-add <your-id_rsa-path>
# eg:
ssh-add ~/.ssh/id_rsa_gitlab
ssh-add ~/.ssh/id_rsa_github
// 如果出现
// Could not open a connection to your authentication agent
// 先执行
ssh-agent bash
# 测试连接
ssh -T git@github.com
测试成功,恭喜你已经正确完成多帐户SSH的配置!!
接下来,就可以继续你的Git之旅了~