如何在一台计算机上同时使用多个github账户
场景:在一台电脑上,同时使用多个github账户操作
比如个人github的person账号和公司github的work账号,这个时候在本地做操作,是无法用work跨账号操作person账号下的git仓库的。
当我用work账号提交属于person账号的代码的时候,会出现以下报错,提示无权限。
$ git push origin master ERROR: Permission to person/git-start.git denied to work. fatal: Could not read from remote repository.
使用git remote -v可查看当前仓库的远程git地址
$ git remote -v origin git@github.com:person/git-start.git (fetch) origin git@github.com:person/git-start.git (push)
那么,一台电脑上如何管理多个github账户呢?
1、设置SSH密钥
创建多个SSH密钥,并保存在对应的文件中
cd ~/.ssh
ssh-keygen -t rsa -C "work@163.com"
ssh-keygen -t rsa -C "person@163.com"
...
以上创建出id_rsa_work, id_rsa_work.pub和id_rsa_person, id_rsa_person.pub
2、将SSH密钥添加到Github账户
将密钥复制到剪切板
pbcopy <~/.ssh/id_rsa_work.pub
将生成的密钥中的公钥内容(即.pub文件)的内容添加到不同的github账户中
-
转到github的帐户设置
-
点击“SSH密钥”,然后“添加SSH密钥”
-
将密钥粘贴到“密钥”字段并添加相关标题
-
点击“添加密钥”,然后输入您的Github密码进行确认
3、创建config配置文件来单独管理密钥
$ cd ~/.ssh/
$ sudo vim config
编辑config文件
# work
Host work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
# personal
Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personal
添加新的密钥
$ ssh-add id_rsa_work
$ ssh-add id_rsa_personal
查看当前的密钥列表,查看是否添加成功
$ ssh-add l
测试以确保Github识别密钥:
$ ssh -T work
Hi work! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T personal
Hi personal! You've successfully authenticated, but GitHub does not provide shell access.
试一下
在和远程库交互的时候,还有一点要注意。
回到命令行上,创建一个测试目录:
$ cd ~/documents
$ mkdir git-start
$ cd git-start
使用work账号,向Github添加一个空白的“readme.md”文件和PUSH:
$ touch readme.md
$ git init
$ git add .
$ git commit -am "first commit"
$ git remote add origin git@work:work/git-start.git
$ git push origin master
注意我们如何使用自定义帐户git@work,而不是git@github.com!
另外,git@work:work/git-start.git。第一个git是在config文件里创建的Host,第二个git为你github的用户名。
再试一下person的PUSH和PULL操作
tips,更改远程仓库命令
$ git remote set-url origin git@work:work/git-start.git
总结,一台计算机上管理多个github账户的核心就是
- ssh密钥
- config文件配置
- git仓库远程地址的配置
这种情况下,需要几点注意
1.remote pull push的时候有问题,因为要设置邮箱问题了 pull的时候识别的是邮箱,2个github账号,2个邮箱,我们自然不能使用global的user.email了
1.取消global
git config --global --unset user.name
git config --global --unset user.email
2.设置每个项目repo的自己的user.email
git config user.email "xxxx@xx.com"
git config user.name "suzie"
之后push pull就木有问题了
git global的user.email对应的是一个线上的github账号,不要随意设置global的,一旦设置了,就锁定到这个email对应的git账号了…尼玛,太危险了
比如我的账号对应关系是
- LaputaGit taohuangmail@163.com
- AshinGit laputacloud@163.com
如果将git config user.email "laputacloud@163.com" 那么提交代码时,会默认使用AshinGit账户提交
关于git的config中配置的user的优先级,局部 > global > system,详见https://blog.csdn.net/trochiluses/article/details/8921138
怎样做最好?
- 全局global保存通用提交的用户
- 局部repo保存需特殊提交的用户