Rain's Blog

git 配置多账号

Rain, Mon Aug 7 2023back

在代码托管方面,一般情况我们都会使用邮箱注册一个 git 账号,然后通过这个账号接管自己的项目或是公司的项目。本文会实现 git 的多账号配置,并在此基础上对已有仓库和新建仓库的账号隔离,做到一号一用,区分个人和工作。

1. 初始化配置及新建私钥

1.1 查看本地全局 git 配置

查看全局用户名和邮箱

git config --global user.name
git config --global user.email

清除全局配置

git config --global --unset user.name
git config --global --unset user.email

1.2 删除本地私钥

绝大部分情况下是在 C 盘目录下,如果找不到可以试着全局搜索 .ssh 文件夹

C:Users/用户名/.ssh/

找到此文件夹删除内部所有文件,接着在 当前文件夹 打开终端输入命令行用于创建新的公私钥

本文会以 userwork 标记

输入以下命令后 按下回车,切记别急着一路回车

 ssh-keygen -t rsa -C "第一个邮箱"

第一个回车 之后会提示你是否生成命名,默认是 id_rsa

Enter file in which to save the key (C:\Users\用户名/.ssh/id_rsa): 这里填入你的重命名(id_rsa_work)

填入重命名之后一路回车,回到/.ssh可以看到用于第一个账号的公私钥生成了,共两个文件

id_rsa_work #公钥
id_rsa_work.pub #私钥

同理重复上面的操作生成新的公私钥,用于第二个账号

那么来到 /.ssh 目录,不出意外你可以看到生成了四个文件,分别对应两个账号的私钥和密钥

id_rsa_work 
id_rsa_work.pub 

id_rsa_user 
id_rsa_user.pub 

1.3 在 github 配置对应的 ssh key

打开 github work 账号来到设置面板,找到 SSH and GPG keys ,点击 New SSH keys,填入标题,以及打开 id_rsa_work.pub文件复制里面的内容粘贴到输入框中,其中的 key 类型不需要改动,默认为Authentication Key,完成创建。 github-ssh-key配置

同理 github user 账号同上。区分好对应文件即可。

1.4 配置 config 文件

回到 /.ssh 文件夹,新建 config 文件,没有后缀名。写入以下内容

Host work                         #自定义主机别名
HostName github.com               #远程主机名
User git                          #指定连接主机使用的是git用户
IdentityFile ~/.ssh/id_rsa_work   #链接引用的私钥路径

Host user
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_user

2. 代码提交

2.1 已有仓库代码上传

由于重新配置了多账号模式,在本地上传代码到远程仓库上会出现用户的识别异常和仓库推送异常,接下来会一步一步还原这些异常并解决 依次输入这两行命令

假设当前是 user 账户

git add .

git commit -m "test"

这时候会提示你需要设置全局用户名和邮箱,这里切记不要设置全局 提示设置用户名和邮箱

不用加--global,普通设置即可

git config user.name 'your name'
git config user.email 'your email'

接着再次执行

git commit -m "test"

git push origin main

执行完git push origin main会发现提示无法关联远程仓库 无法关联仓库

此时只需要再去关联远程仓库即可。

#正常情况的关联命令应该是这样的 (弃用)
 git remote add origin [email protected]:xxx/repository.git
# 多账号情况 (使用)
 git remote add origin git@user:xxx/repository.git

还记得一开始配置的 config 文件吗,我们将id_rsa_user的私钥指向了别名user。所以这里也要跟着改变用于识别。

还有些情况会报这个错误,提示没有权限或者找不到仓库,这个问题可能是协议不同导致的,比如从https 切换到 ssh 没有权限

这里可以重新修改远程仓库 url

git remote set-url origin git@user:xxx/repository.git

最后再次输入完成现有仓库的代码上传,同时也隔离了账号,现在只有 user 账号可以对此仓库进行操作了。

git push origin main

2.2 新建仓库的代码上传

新仓库的代码上传对比现有仓库相对简单,当前使用 work 账户操作

git add .
git commit -m "first commit"

提交 commit 会提示需要设置用户名和邮箱,和之前的一样,同样不需要加 --global

git config user.name 'your name'
git config user.email 'your email'

再次提交信息,新建切换分支,关联远程仓库

git commit -m "first commit"
git branch -M main

# 正常情况 (弃用)
git remote add origin [email protected]:xxx/repository.git
# 多账号情况 (使用)
git remote add origin git@work:xxx/repository.git

git push -u origin main

如果你用上了代理发现此时提交报错以下信息! 不能推送

回到config重新设置

Host work
HostName ssh.github.com 
Port 443
User git 
IdentityFile ~/.ssh/id_rsa_work 

Host user
HostName ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa_user