Git使用:如何在本地管理和切换多个github账号

Posted by Nefelibata on Wed 2024-06-05 | | about 4 mins
Last Modified on Tue 2024-06-11

参考:

【git 使用】如何在本地管理和切换多个 github 账号

Windows下使用ssh-add报错 Error connecting to agent: No such file or directory

Git配置多个用户

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;

效果如图:

img

找到 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” 按钮,将刚才复制的内容粘贴到文本区域,同时添加一个相关标题;成功之后是这个样子的:

img

  • 相对的,在其他账户上重复相对应的操作;以我的为例,则是把 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 服务的流程为:

  1. 设置 → 应用 → 可选功能 → [OpenSSH服务器]

    image-20240605005924779

  2. 计算机管理 → 服务和应用程序 → 服 务→ OpenSSH Authentication Agent&OpenSSH Server → 右击

启动之后看到的是这样子的:

img

开始 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

可以看到可以成功把该仓库克隆过来:

img

还是以在我的私人 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成功之后是这样的:

img

可以在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步都配置好后,在单独某个账户下的操作为:

  1. 配置本git项目账户名
  2. 配置本git项目账户邮箱
  3. 清除当前连接
  4. 新建连接,host为我们重新设置的company
  5. 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