Git 关联多个账号

1,116 阅读1分钟

场景

公司的代码在阿里云效上,另外自己还有项目托管在 github,所以需要存在两个 git 账户。

但如果你没有要维护的 github 项目,那没事了 🙊

步骤

  • 多个账户需要在每个项目中分别配置用户名和邮箱,如果有配置过全局用户名和邮箱,先删除掉。
$ git config --global --unset user.name
$ git config --global --unset user.email
  • 接下来用下面的命令给每个账户生成一对密钥
$ ssh-keygen -t rsa -C <email>

提示 Enter a file in which to save the key (/Users/xxx/.ssh/id_rsa): [Press enter], 两次生成需要不同的密钥文件。

Enter a file in which to save the key (/Users/xxx/.ssh/id_rsa): /Users/xxx/.ssh/id_rsa_github

Enter a file in which to save the key (/Users/xxx/.ssh/id_rsa): /Users/xxx/.ssh/id_rsa_ali

提示输入密码信息时,直接回车跳过,否则每次拉代码都需要输入密码。

两次分别生成了两组文件,名称分别是 id_rsa_github、id_rsa_ali(都在系统的 ~/.ssh/ 路径下⚠)

  • 添加私钥到本地
$ ssh-add ~/.ssh/id_rsa_github
$ ssh-add ~/.ssh/id_rsa_ali

如果出现报错: Could not open a connection to your authentication agent 则执行一下如下命令即可

ssh-agent bash

如果执行后仍然报上面的错误,则先执行eval ssh-agent 命令,然后再执行ssh-add ~/.ssh/id_rsa_github

若途中报错 “Permissions ???? for '/Users/xxx/.ssh/rsa' are too open”的问题,则是该私钥文件权限过高,需要设置其权限:chmod 600 ~/.ssh/id_rsa_github

添加后可以使用ssh-add -l命令进行查看。

  • 配置本地ssh

进入 .ssh 文件夹,修改 config 文件,如果没有此文件需要新建。

$ cd ~/.ssh
$ vim config

写入:

Host github  # 自定义别名
HostName github.com  # 托管网站的域名
User git
IdentityFile ~/.ssh/id_rsa_github  # 使用的密钥文件

Host code.aliyun.com
HostName code.aliyun.com
User git
IdentityFile ~/.ssh/id_rsa_ali

👀 tips:

1. 如果出现类似`garbage at end of line`报错,原因是`cnfig`文件中存在看不见的各种非法字符  解决方案: 删掉非法字符(去掉注释)
2. 阿里云效的 Host 别名建议直接使用 code.aliyun.com 这样以后克隆项目时就不需要再将地址更改为别名,比如 git clone git@testName:xxx/test.git
  • 添加 ssh keys

分别在 github 和 阿里云效 上添加 ssh keys。(公钥)

  • 测试配置是否成功
$ ssh -T github
$ ssh -T code.aliyun.com

或者是使用下面的命令查看是否采用了正确的秘钥id_rsa_ali文件

$ ssh -vT code.aliyun.com

如果是使用 windows 下的 ubuntu 子系统,可能会因为权限不够报错:Bad owner or permissions on /home/xxx/.ssh/config

sudo chmod 600 ~/.ssh/config命令即可解决。

  • 克隆项目代码

Bingo~ 配置生效,确定连接没问题后,就可以 clone 项目了

拉完代码在项目文件夹下单独设置每个 repo 的用户名和邮箱

git config user.email “xxxx@xx.com”
git config user.name “xxxx”

但这样做每次新拉取一个项目都要配置一次用户名跟邮箱,如果觉得麻烦,可以把公司的账户设置为全局,然后在单独的需要用别的账号的项目下配置对应的账号。

如果你的仓库是之前已经拉取到本地的项目,而且你又自定义了Host的别名(testName)的话🙃,那么除了要修改项目.git的用户名和邮箱,还需要重写remote

$ cd .git
$ vim config

修改 config 文件中已有 remote "origin" 信息

[remote "origin"]
    url = git@github.com:xxx/xxx.git
    fetch = +refs/heads/*:refs/remotes/origin/*

将 github.com 修改为自定义的别名 testName

或者是一行代码搞定: git remote set-url origin git@testName:xxx/xxx.git

注意 xxx 都是都是代指你的项目路径 😊