Mac下配置多个Git账户
前言:鼠鼠最近入职快手,也是人生中第一个大厂offer,公司发的mac,用了一段时间mac之后,自己的windows电脑已经很久没用了,我经常需要将代码托管到github、gitlab这样的网站上。公司的代码需要托管到gitlab上,自己的开源代码托管到GitHub上,每个托管网站都对应一个git账户。默认情况下,一台电脑的Git只对应一个账户,只能往一个网站push代码,非常不便。这篇博客将介绍如何在一个Git终端中配置多个账户,同时管理多个托管网站的代码。
准备工作
在初次安装git的时候,你肯定执行过下面的命令配置全局用户名和邮箱
git config --global user.name "xxx" // 配置全局用户名
git config --global user.email "yyy@mail.com" // 配置全局邮箱
如果不确定是否已经配置过,可以使用下面的命令查看
git config --global user.name
git config --global user.email
由于需要管理多个账户,所以仅仅使用全局值是不够的,需要在每个仓库中单独配置。 请使用下面的命令来清除全局git配置!!!!这很重要
git config --global --unset user.name
git config --global --unset user.email
开始配置
1.对每个账户生成一对密钥
首先进入保存秘钥的目录:
cd ~/.ssh // 进入目录,该目录下保存生成的秘钥,如果没有这个文件,就手动创建
然后,根据账户邮箱生成秘钥。例如我在GitHub上的邮箱是1505994122@qq.com
,则命令为:
ssh-keygen -t rsa -C "1505994122@qq.com"
输入完成后,会有如下提示:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/toby/.ssh/id_rsa):
这里要求对秘钥进行命名,默认的文件名是id_rsa
。为了方便区分,我这里命名为id_rsa_github
。接下来的提示都直接进行回车,直到秘钥生成。通过ls
命令,可以看到刚刚生成的密钥对id_rsa_github
和id_rsa_github.pub
。其中id_rsa_github.pub
是公钥。
同样,对于GitLab上的账户,是用公司邮箱注册的,按照同样的步骤生成id_rsa_gitlab
的秘钥对。接下来的步骤,除额外说明外,两个账户的操作完全相同。
2. 私钥添加到本地
SSH协议的原理,就是在托管网站上使用公钥,在本地使用私钥,这样本地仓库就可以和远程仓库进行通信。在上一步已经生成了秘钥文件,接下来需要使用秘钥文件,首先是在本地使用秘钥文件:
ssh-add ~/.ssh/id_rsa_github // 将GitHub私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将GitLab私钥添加到本地
为了检验本地是否添加成功,可以使用ssh-add -l
命令进行查看
3. 对本地秘钥进行配置
由于添加了多个密钥文件,所以需要对这多个密钥进行管理。在.ssh
目录下新建一个config文件:
touch config
文件中的内容如下:
Host github.com // 网站的别名,最好和HostName一致,后面省去不少麻烦
HostName github.com // 托管网站的域名
User tobyhhw // 托管网站上的用户名
IdentityFile ~/.ssh/id_rsa_github // 使用的密钥文件
// GitLab的配置相同
Host xxx.com
HostName xxx.com
User xxx
IdentityFile ~/.ssh/id_rsa_gitlab
4. 公钥添加到托管网站
以GitHub为例,先在本地复制公钥。进入.ssh
目录,使用vim id_rsa_github.pub
查看生成的GitHub公钥,全选进行复制。
登录GitHub,点击右上角头像选择settings
,在打开的页面中选择SSH and GPG keys,
在打开的页面的Key输入框中粘贴刚刚复制的公钥,title的名字自己随便去,然后点击下方的
Add SSH key
按钮:
至此,托管网站的公钥添加完成。总结来说,就是针对每个托管网站分别生成一对密钥,然后分别添加到本地和托管网站。
这时候,可以测试一下配置是否成功,测试命令需要使用别名。例如,对于GitHub,本来应该使用的测试命令是:
ssh -T git@github.com
在config文件中,给GitHub网站配置的别名就是github.com,所以不需要改变,这就是为什么前面我说别名最好和HostName一样
**
ssh -T git@github.com
5.如何使用
1.从远端拉取代码
选择SSH协议的复制命令,如Github上代码库test,其复制命令为
git clone git@github.com:tobyhhw/test.git
这里还是需要使用别名,所以实际使用的复制命令还是不变:
git clone git@github.com:tobyhhw/test.git
从这里可以看出前面把别名和HostName设置为一样可以省多少事了,如果你的别名和HostName不一致,这里举个例子
Host github.com
HostName github
User tobyhhw // 托管网站上的用户名
IdentityFile ~/.ssh/id_rsa_github // 使用的密钥文件
原命令为:
git clone git@github.com:tobyhhw/test.git
由于别名为github,所以实际使用的复制命令应当为:
git clone git@github:tobyhhw/test.git
是不是很麻烦?
2. 单独配置该仓库的用户名和邮箱
因为没有配置全局的git,所以我们需要对每一个仓库配置各自的用户名和邮箱
git config user.name "tobyhhw"
git config user.email "1505994122@qq.com"
到这里就全部配置完毕啦,大家可以愉快的推送和拉取代码了
转载自:https://juejin.cn/post/7356550566535266356