场景
公司的代码在阿里云效上,另外自己还有项目托管在 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 都是都是代指你的项目路径 😊