Mac下配置多个Git账户

唠叨几句

对于大多数程序员,喜欢将代码托管到github、gitlab、gitee上。为了避免每次push、pull代码时都要输入用户名和密码,通常会选择使用ssh协议,将公钥保存到托管网站上。
在实际开发中,通常要将代码托管到多个平台上。如:我们公司的代码需要托管到gitee上,自己的开源代码托管到GitHub上等,每个托管平台都对应一个git账户。一般情况下,一台电脑的Git只对应一个账户,只能往一个网站push代码,很不方便。小主近期与朋友写开源代码时,就遇到这种情况,为了在本地使用两个Git账号,push、pull代码,费了老大劲才搞好,这篇文章就介绍如何在一个Git终端中配置多个账户,同时管理多个托管网站的代码。

准备工作

首先,设置Git的全局配置。首次次安装Git时,往往会使用如下的命令配置全局用户名和邮箱:

git config --global user.name "xxx"  # 配置全局用户名,如Github上注册的用户名
git config --global user.email "yyy@mail.com"  #配置全局邮箱,如Github上配置的邮箱

--global选项代表全局,是配置的全局user.nameuser.email。不同的Git仓库默认的用户名和邮箱都是这个值。由于需要管理多个账户,所以仅使用这个全局值是不够的,需要在每个仓库中单独配置
如果已配置过,先重置

git config --global --unset user.name
git config --global --unset user.email

查看账户配置

git config --global user.name
git config --global user.email

配置步骤

1. 对每个账户生成一对密钥

首先进入保存秘钥的目录,该目录下保存秘钥,需要提醒的是这个目录是默认隐藏的,可以打开Finder,同事按下command + shift + .即可显示全部隐藏文件

cd ~/.ssh //查看秘钥目录

然后,根据账户邮箱生成秘钥。如我在gitee上的邮箱是Balopy@163.com,则命令为:

ssh-keygen -t rsa -C "Balopy@163.com"

生成秘钥后,会提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/liugui/.ssh/id_rsa):

可以使用

cat ~/.ssh/id_rsa.pub  #查看公钥,  id_rsa  没有pub 后缀的是秘钥,也叫私钥

查看公钥

注意:
1. (/Users/liugui/.ssh/id_rsa): 冒号后面是让输入秘钥名的;
2. 秘钥默认的文件名是id_rsa。为方便区分,可以自定义名字为id_rsa_Balopy
3. 接下来的提示都直接进行回车,直到秘钥生成。
4. 通过ls命令,可以看到刚刚生成的密钥id_rsa_Balopy公钥id_rsa_Balopy.pub
同理,对其他账户,使用同样的方法。

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 Balopy
# 托管网站的域名
HostName gitee.com 
#指定优先使用哪种方式验证,支持密码和秘钥验证方式
PreferredAuthentications publickey 
# 托管网站上的用户名,最好写账户邮箱,否则容易设置失败
User lueng@163.com
# 使用的密钥文件
IdentityFile ~/.ssh/id_rsa_Balopy_gitee

# GitLab的配置相同
Host wang
HostName gitee.com
PreferredAuthentications publickey
User wang@268xue.com
IdentityFile ~/.ssh/id_rsa

如果报以下错误,需要检查一下,用户名是否是邮箱,或域名是否按要求设置

配置错误的情况

注意:
Host 是别名,替代的是 gitee.com, 在push/pull代码是,
切记格式:

git@gitee.com:balopy/Demo_Swift_2.0.git  // 原仓库地址
git@Balopy:Balopy/Demo_Swift_2.0.git     // 使用时用别名
git clone Balopy:balopy/Demo_Swift_2.0.git //如clone 时用别名

4. 公钥添加到托管网站

以GitHub为例,先在本地复制公钥。进入.ssh目录,使用vim id_rsa_github.pub查看生成的GitHub公钥,全选进行复制。

登录GitHub,点击右上角头像选择设置,在打开的页面中选择SSH公钥

添加公钥

托管网站的公钥添加完成。每个托管平台分别生成一对密钥,分别添加到本地和托管网站。

这时候,可以测试一下配置是否成功,测试命令使用别名。例如,对于GitHub,本来应该使用的测试命令是:

ssh -T gitee.com // 单账号使用原域名,
ssh -T Balopy   // 多账号测试时使用别名
测试配置成功

如何使用

使用有两种情况,一种情况是从远端拉取代码到本地,一种是本地已有仓库需要与远程仓库关联。

1.如果是从远端拉取代码

选择SSH协议的复制命令,如对于GitLab上代码库test,其复制命令为

git clone git@gitee.com:Balopy/test.git

由于使用了别名gitlab,所以实际使用的复制命令应当为:

git clone Balopy:Balopy/test.git

这种方法较为简单,修改后的代码无需额外配置,可以直接push/pull

2. 如果是本地已有的仓库

如果本地已有仓库,需要与远端进行关联,进入本地仓库文件夹,单独配置该仓库的用户名和邮箱

git config user.name "Balopy"
git config user.email "Balopy@163.com"

然后,进入本地仓库的git目录,打开config文件

cd .git   // 如果是新建文件夹需要先执行git init
vim config  //新建config 文件

在config文件中,修改(config文件中已有remote "origin"信息)或者添加(config文件中不包含remote "origin"信息)分支信息:

[remote "origin"]
        url = git@Balopy:Balopy/test.git  //域名使用别名,原git@gitee.com
        fetch = +refs/heads/*:refs/remotes/origin/*

如果使用原域名会报错,因为config 设置了别名

使用原域名会报错

使用别名clone
使用别名成功

总结一下吧,多账号使用仓库,关键是要配置好用户名和邮箱,及使用别名。使用别名的目的是为了通过别名,将本地仓库与密钥目录.ssh文件夹下的密钥进行管理,这样本地仓库使用的私钥与托管网站使用的公钥的配对,而用户名和邮箱是该仓库使用SSH协议时需要用到的信息。
参考博文:https://juejin.im/post/5d1ebab8f265da1bd2610b6b
完事儿,些处应有掌声_

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345