参考:
【git 使用】如何在本地管理和切换多个 github 账号
Windows下使用ssh-add报错 Error connecting to agent: No such file or directory
1 创建 SSH 密钥
如果有两个 github 账户,一个工作用的,用户名是 company_account;另一个是私人的:personal_account。所以,我要创建两个密钥,每个账号一个:
操作为:
-
打开cmd;
-
依次输入命令:
1cd ~/.ssh 2ssh-keygen -t rsa -C "1356409766@qq.com" 3ssh-keygen -t rsa -C "3083074260@qq.com"
-
当出现 “Enter file in which to save the key” 的提示时,将文件保存为 id_rsa_<>。在我的示例中,我将文件保存为
~/.ssh/id_rsa_personal
和~/.ssh/id_rsa_company
;
效果如图:
找到 C:\Users\personal_account.ssh 下,可以看到,生成了下面四个文件:
- id_rsa_personal
- id_rsa_personal.pub
- id_rsa_company
- id_rsa_company.pub
2 将新密钥绑定到 github 账号
- 用记事本打开
id_rsa_personal.pub
文件,全选复制; - 来到我的私人github账户,找到 setting,打开,点击 “SSH and GPG keys” 选项,可以看到有一个 “add SSH key” 按钮,将刚才复制的内容粘贴到文本区域,同时添加一个相关标题;成功之后是这个样子的:
- 相对的,在其他账户上重复相对应的操作;以我的为例,则是把
id_rsa_company.pub
的内容粘贴到我工作账户 company_account 的 ssh 上;
3 创建一个配置 config 文件来管理 key
在 ~/.ssh/ 目录下创建一个 config 文件
复制代码找到这个文件,并用编辑器打开(我的是 vscode),然后将下面内容写入文件,保存:
1# personal_account
2Host github.com
3User personal_account@qq.com
4Hostname ssh.github.com
5PreferredAuthentications publickey
6IdentityFile ~/.ssh/id_rsa
7Port 443
8
9# company_account
10Host company
11HostName ssh.github.com
12User company_account@163.com
13IdentityFile ~/.ssh/id_rsa_company
这里我们的主机名称不是 github.com,而是将其命名为 github.com 和 company。不同之处在于,我们现在附加了之前创建的新标识文件: id_rsa_<>;因为我是个别是公司账户,所以我就是在原来个人账户的基础上新增了company的host。
4 更新存储的key
在更新存储之前,我们要先检查一下本地的 OpenSSH 服务有没有开启。不然会出错。 开启 ssh 服务的流程为:
-
设置 → 应用 → 可选功能 → [OpenSSH服务器]
-
计算机管理 → 服务和应用程序 → 服 务→ OpenSSH Authentication Agent&OpenSSH Server → 右击
启动之后看到的是这样子的:
开始 SSH 服务之后,我们就可以使用ssh 命令了。
验证一下! github 是否能识别到这些 keys;在cmd中输入:
1ssh -T git@personal
2ssh -T git@company
可以看到 “Hi personal_account! You’ve successfully authenticated, but GitHub does not provide shell access.” 的提示语。这表明,github 能识别这些 keys 了。Cool !
5 测试 clone 和 push
以我的私人账户为例,我想把 personal_account 账号上的 Look-Thinking 仓库克隆到本地,然后操作。
在cmd 上输入:
1git clone git@personal:personal_account/Look-Thinking.git
可以看到可以成功把该仓库克隆过来:
还是以在我的私人 github 账号 personal_account 上操作为例。在 账号上创建 work-test 仓库;然后在本地创建 test 文件夹。创建好 readme.md 文件后,将其 push 到 github ;
1git init
2git add .
3git commit -am "first commit"
4git remote add origin git@personal:personal_account/test.git
5git push -u origin master
将文件push成功之后是这样的:
可以在github账户上看到在本地对 readme.md的操作结果。git pull 同理。
6 仓库账户配置
将随便一个git项目下将全局账户设置为私人账户,因为我是就个别账户是公司账户,所以其余都设置成私人账户,如果账户很多,也可以分别设置:
1git config --global user.name "personal_account"
2git config --global user.email "personal_account@163.com"
3git config user.name
4git config user.email
在公司git项目下将账户设置为公司账户,不需要加--global
,因为这里是局部账户设置:
1git config user.name "company_account"
2git config user.email "company_account@163.com"
3git config user.name
4git config user.email
7 更改远程仓库
如果某个本地仓库之前已经用 git remote add 和远程仓库建立过连接,我们需要先清除当前连接,不然会报错:“fatal: remote origin already exists.”;清除当前连接之后,然后连接新的账号里的仓库,如:
1git remote rm origin
2git remote add origin git@company:company_account/work-test.git
这里,我们就断开了之前和 personal_account 账号的连接,然后切换到了 company_account 账号。 这样配置好之后,就可以直接使用命令行操作了,这个账户也不需要再继续调整什么了,不同账户之间切换直接切换到目录就行了
8 总结
前面的1-4步都配置好后,在单独某个账户下的操作为:
- 配置本git项目账户名
- 配置本git项目账户邮箱
- 清除当前连接
- 新建连接,host为我们重新设置的company
- git更新
1@REM git config user.name "flamencogo"
2@REM git config user.email "flamencogo@163.com"
3@REM git config user.name
4@REM git config user.email
5@REM git remote rm origin
6@REM git remote add origin git@company:flamencogo/NeuralNetworkandDeepLearning.git
7git add .
8git commit -m "update"
9git push origin main