Win11配置两个git用户

背景

该方法太麻烦,不建议使用,建议参考这篇Git多用户环境隔离提交

有两个github账号,一个主要负责公开的内容,一个私人的,需要在同一台电脑上满足代码提交且互不干扰。核心操作分为三步:

  1. 配置ssh的config文件
  2. 切换用户
  3. 关闭全局用户名称(可选)

测试环境

  • Win: 11
  • OpenSSH: 8.6
  • Git: 2.39.1.windows.1

1. 配置.ssh文件夹下config文件

生成key

自己有秘钥对就不用生成了

1
2
3
ssh-keygen -t rsa -b 4096 -C "luyublog@gmail.com"

输入保存位置,密码(最好需要,否则我的环境下后续会报错)等信息,这里有几个账号就生成几次

绑定key

将public key与github关联

更改ssh配置文件

目录:~/.ssh/ 下的 config,没有则新建一个,IdentityFile后面接私钥的路径,内容如下:

1
2
3
4
5
6
7
8
9
Host east
HostName github.com
User git
IdentityFile the/path/to/your/privake_key

Host luyublog
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_luyublog

检查本地的OpenSSH服务安装状态

设置->可选功能->OpenSSH 保证已经安装好了服务。

增加key

这里我是切换到了密钥对所在路径执行的命令所以不用带路径

1
2
3
4
5
6
7
8
// 增加第一个秘钥
ssh-add the_path_to_your_prikey_key

// 增加第二个秘钥
ssh-add id_rsa_github_luyublog

# 验证识别是否正确,如果ok的话会有成功提示
ssh -T luyublog

增加key时报错:Error connecting to agent: No such file or directory

原因:OpenSSH服务没有开启
参考

解决办法:

1
2
3
4
5
6
7
8
9
10
11
12
# 查看服务状态,显示Stopped说明就是有安装且关闭状态,开启一下就行
get-service ssh*

结果:
Status Name DisplayName
------ ---- -----------
Stopped ssh-agent OpenSSH Authentication Agent

# 手动开启服务
Set-Service -Name ssh-agent -StartupType Manual

Start-Service ssh-agent

增加key时报错:Bad permissions. Try removing permissions for user balabala

原因:私钥权限太低,建议重新生成带密码的的密钥对

2. 切换用户

其实没有切换用户的这个功能,git是根据上面的config和你的远程仓库@后面的host来判断使用哪个用户提交。所以使用不同的用户核心在于远程仓库的配置

配置示例

最好找一个现有测试工程验证,在测试仓库的路径下执行以下命令

1
2
3
4
5
6
7
8
# 清除仓库之前的关联
git remote rm origin

# 添加新的ssh格式仓库地址,注意这里格式:git@luyublog:luyublog:第一个luyublog是config里面host,第二个是github的用户名,不能直接使用github提供的ssh链接

git remote add origin git@luyublog:luyublog/SpringBootDemo.git

# 随便修改点东西然后提交,如果是当前用户的仓库且远程地址配置正确应该就会弹出密码验证,不是的话应该就报没权限了,建议检查仓库地址是否配置正确

提交时报错: Permission denied

git@github.com: Permission denied (publickey). Could not read from remote repository. Please make sure you have the correct access rights and the repository exists

可能的原因:

  1. 用户不对,用了a用户去提交b用户的仓库
  2. 检查远程仓库格式不对,直接使用了github提供的链接

解决:

  1. 检查上文 配置示例 切换正确远程仓库
  2. 还是检查上文的仓库链接格式 配置示例

3. 关闭全局name和email(可选)

如果你的两个账户需要区分名称那么关闭name和email的全局配置很重要,不然两个用户提交的名称都是一样就尴尬了。但是这里有个奇怪的地方就是信息改成局部后在github上看到的名称和你config设置的并不一样貌似用的github用户名,这里我没有深究原因。注意,关闭全局配置后每个工程都要重新设置一遍局部信息。

1
2
3
4
5
6
7
8
9
10
# 看下当前全局配置
git config --global -l

# 取消掉全局配置
git config --global --unset user.name
git config --global --unset user.email

# 设置局部配置,不设置无法提交
git config user.name luyublog
git config user.email luyublog@gmail.com

参考

  1. https://juejin.cn/post/6844903831000596488

  2. 如何在一台电脑上管理/切换多个github账户