场景
需要用一台(Windows)电脑同时连接多个GitHub账号。
建立SSH连接
创建两个SSH key
在终端输入以下命令:
1ssh-keygen -t rsa -f ~/.ssh/id_rsa_m -C "firstmail@gmail.com" #绑定一个GitHub账号所用的邮箱
2ssh-keygen -t rsa -f ~/.ssh/id_rsa -C "secondmail@gmail.com" #绑定另一个GitHub账号的邮箱
添加SSH公钥到对应GitHub账号中
两个SSH key分别配置在对应GitHub账号中:
本地添加新SSH密钥到SSH agent中
在终端中输入命令:
1ssh-add -D #清空本地的SSH缓存
2ssh-add ~/.ssh/id_rsa
3ssh-add ~/.ssh/id_rsa_m
4ssh-add -l
若提示 Could not open a connection to your authentication agent.
则先执行命令 ssh-agent bash
即可。
修改本地配置文件
要在本地配置文件中设置不同账号和SSH key的对应关系,就需要在 ~/.ssh/config
文件(没有就新建一个)中设置不同仓库指向不同的密钥文件:
1#第一个账号
2Host github.com # 这里域名随意写,标识账号1
3HostName github.com #这里域名就是我们要访问的远程服务器域名github.com
4User git #可以随意填写
5IdentityFile ~/.ssh/id_rsa #私钥位置
6
7# 第二个账号
8Host second.github.com #标识账号2
9HostName github.com
10User git
11PreferredAuthentications publickey
12IdentityFile ~/.ssh/id_rsa_m
测试SSH连接
在终端中执行命令
1ssh -T git@github.com
2ssh -T git@second.github.com
提示 Hi Morimit! You've successfully authenticated, but GitHub does not provide shell access
则为成功。
配置git
配置项目文件夹信息
在项目文件夹中打开终端并执行以下命令:
1# 取消全局 用户名/邮箱 配置
2$ git config --global --unset user.name
3$ git config --global --unset user.email
4# 进入项目文件夹,单独设置每个repo 用户名/邮箱
5$ git config user.email "xxxx@xx.com"
6$ git config user.name "xxxx"
7$ git config --list
配置远程仓库信息
注意设置远程仓库的时候,需要与 config
文件中的Host名称对应。
1$ git remote rm origin
2# 远程仓库地址,注意Host名称
3$ git remote add origin git@second.github.com:githubUserName/repName.git
4$ git remote -v # 查看远程
将本地仓库上传到远程仓库
push测试:
1git add .
2git commit -m "自行添加注释"
3git push origin main #推送到远端main分支
流程总结
- 确保SSH连接成功
- 在项目文件夹目录下打开git bash终端。
- 将文件夹设为git仓库:
git init
- 在本地添加远程仓库的SSH地址(注意这里的账号名
1git remote add origin git@second.github.com:Morimit/Morimit_source.git
git@second.github.com
是和~/.ssh/config
文件中配置一致的) - 配置git账号:
git config user.name "Morimit"
和git config user.email "firstmail@gmail.com"
。 - 添加到暂存区和提交到当前分支:
git add .
、git commit -m "comments"
- 推送到远程仓库:
git push origin main
- 如果
git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream <branch-name> origin/<branch-name>
。