如何在一台计算机上同时使用多个github账户

327 阅读3分钟

如何在一台计算机上同时使用多个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保存需特殊提交的用户