Win11配置两个git用户
背景
有两个github账号,一个主要负责公开的内容,一个私人的,需要在同一台电脑上满足代码提交且互不干扰。核心操作分为三步:
- 配置ssh的config文件
- 切换用户
- 关闭全局用户名称(可选)
测试环境
- Win: 11
- OpenSSH: 8.6
- Git: 2.39.1.windows.1
1. 配置.ssh文件夹下config文件
生成key
自己有秘钥对就不用生成了
ssh-keygen -t rsa -b 4096 -C "luyublog@gmail.com"
输入保存位置,密码(最好需要,否则我的环境下后续会报错)等信息,这里有几个账号就生成几次
绑定key
将public key与github关联
更改ssh配置文件
目录:~/.ssh/ 下的 config,没有则新建一个,IdentityFile后面接私钥的路径,内容如下:
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
这里我是切换到了密钥对所在路径执行的命令所以不用带路径
// 增加第一个秘钥
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服务没有开启
参考
解决办法:
# 查看服务状态,显示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来判断使用哪个用户提交。所以使用不同的用户核心在于远程仓库的配置
配置示例
最好找一个现有测试工程验证,在测试仓库的路径下执行以下命令
# 清除仓库之前的关联
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
可能的原因:
- 用户不对,用了a用户去提交b用户的仓库
- 检查远程仓库格式不对,直接使用了github提供的链接
解决:
3. 关闭全局name和email(可选)
如果你的两个账户需要区分名称那么关闭name和email的全局配置很重要,不然两个用户提交的名称都是一样就尴尬了。但是这里有个奇怪的地方就是信息改成局部后在github上看到的名称和你config设置的并不一样貌似用的github用户名,这里我没有深究原因。注意,关闭全局配置后每个工程都要重新设置一遍局部信息。
# 看下当前全局配置
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