背景
该方法太麻烦,不建议使用,建议参考这篇Git多用户环境隔离提交
有两个github账号,一个主要负责公开的内容,一个私人的,需要在同一台电脑上满足代码提交且互不干扰。核心操作分为三步:
- 配置ssh的config文件
- 切换用户
- 关闭全局用户名称(可选)
测试环境
- Win: 11
- OpenSSH: 8.6
- Git: 2.39.1.windows.1
1. 配置.ssh文件夹下config文件
生成key
自己有秘钥对就不用生成了
1 | ssh-keygen -t rsa -b 4096 -C "luyublog@gmail.com" |
绑定key
将public key与github关联
更改ssh配置文件
目录:~/.ssh/ 下的 config,没有则新建一个,IdentityFile后面接私钥的路径,内容如下:
1 | Host east |
检查本地的OpenSSH服务安装状态
设置->可选功能->OpenSSH 保证已经安装好了服务。
增加key
这里我是切换到了密钥对所在路径执行的命令所以不用带路径
1 | // 增加第一个秘钥 |
增加key时报错:Error connecting to agent: No such file or directory
原因:OpenSSH服务没有开启
参考
解决办法:
1 | # 查看服务状态,显示Stopped说明就是有安装且关闭状态,开启一下就行 |
增加key时报错:Bad permissions. Try removing permissions for user balabala
原因:私钥权限太低,建议重新生成带密码的的密钥对
2. 切换用户
其实没有切换用户的这个功能,git是根据上面的config和你的远程仓库@后面的host来判断使用哪个用户提交。所以使用不同的用户核心在于远程仓库的配置
配置示例
最好找一个现有测试工程验证,在测试仓库的路径下执行以下命令
1 | # 清除仓库之前的关联 |
提交时报错: 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用户名,这里我没有深究原因。注意,关闭全局配置后每个工程都要重新设置一遍局部信息。
1 | # 看下当前全局配置 |