同一台电脑上管理多个git账户

https://www.jianshu.com/p/3fc93c16ad2d
创建日期:2020年4月6日
系统版本:macOS Mojave(V10.14.6)

本篇,Windows系统的电脑也通用,仅有一个linux的命令,需要自己调查。

1.创建SSH密钥

1.1 查看本机是否存在SSH keys,

$ ls ~/.ssh/

没有,则继续下一步;如果存在,则跳到【3.在GitHub账户中添加你的公钥】。

1.2 创建一对新的SSH密钥(keys)

$ssh-keygen -t rsa -C "your_email@example.com"

运行后,将按照你提供的邮箱,创建一对密钥,控制台出现的信息:

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

直接回车,则将密钥按默认文件进行存储。此时也可以输入特定的文件名,比如/c/Users/you/.ssh/github_rsa。直接回车后,会要求你输入密码:

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

接着,根据提示,你需要输入密码和确认密码(说到这里,如果你很放心,其实可以不用密码,就是到输密码的地方,都直接回车,所以每次push就只管回车就行了。所谓的最安全的密码,就是没有密码 – – 哈哈)。密码设置完后,回车,会出现如下信息:(该图是从设置密钥开始的截图)



版本不同,可能出现的答案也不同,总之,没有出现错误提示,应该就是成功了。

1.3 在GitHub账户中添加你的公钥

运行如下命令,将公钥的内容复制到系统粘贴板(clipboard)中。

$ pbcopy < ~/.ssh/id_rsa.pub
#上面命令是Mac下的命令,windows方法相同,但是此命令不同

接着:

(1) 登陆GitHub,进入你的Account Settings.
点击你的头像,选择Settings,进入设置界面

(2) 在左边菜单,点击”SSH and GPG keys”。
(3) 点击”New SSH key”按钮.

(4) 粘贴你的密钥到key输入框中,点击"Add SSH key"按钮


(5) 再弹出窗口,输入你的GitHub密码,点击确认按钮。

(6) 到此,大功告成了!

1.4 测试

为了确认我们可以通过SSH连接GitHub,我们输入下面命令。输入后,会要求我们提供验证密码,输入之前创建的密码就ok了。

$ ssh -T git@github.com

你可能会看到告警信息,如下:

1.The authenticity of host 'github.com (207.97.227.239)' can't be established.
2.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
3.Are you sure you want to continue connecting (yes/no)?

不用担心,直接输入yes。

如果看到下面信息,就说明一切完美!

Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.

注意
如果前面没有将生成的密钥存放在默认的文件id_rsa中(而是my_rsa中),那么ssh -T git@github.com命令就需要添加参数来执行。如下:

$ ssh -T -i my_rsa git@github.com

以上参考使用SSH密钥连接Github

2、单机如何控制不同的SSH Keys连不同的Git环境?

其实,一套SSH密钥是可以用在不同的SSH环境的.

但是如果由于某种要求,需要用不同的SSH密钥连接不同的Git环境。假设具体场景是,已经建了密钥github_rsa,还需要创建work_rsa连接工作环境git仓库,那么,可以按下面操作进行:

2.1 创建第2个密钥

生成新的公钥,并命名为 id_rsa_2 (保证与之前密钥文件名称不同即可)

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "yourmail@xxx.com"

注意:这个邮箱是你另一个账户的邮箱。

2.2 创建config配置文件

.ssh 文件夹下新建 config 文件并编辑,

$ cd .ssh
$ vi config

(按i键,进入编辑模式。不了解vi编辑器的可以找到config的路径,用工具打开该文件,可视化编写)
另不同 Host 实际映射到同一 HostName,但密钥文件不同。Host 前缀可自定义,例子中ieit

# default                                                                       
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# two                                                                           
Host ieit.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_2

(按esc,再输入:wq退出vi编辑器)

2.3 在GitHub账户中添加公钥

将生成的 id_rsa_2.pubid_rsa_2.pub内容copy 到对应的 github中,参考【1.3 在GitHub账户中添加你的公钥】。
如果你是从第一步开始跟下来的,那么我们现在只要设置另一个github账户的SSH key即可。
将第二个账户的公钥内容复制到系统粘贴板上:

$ pbcopy < ~/.ssh/id_rsa_2.pub

2.4 测试 ssh 链接

ssh -T git@ieit.github.com
ssh -T git@github.com
# Hi IEIT! You've successfully authenticated, but GitHub does not provide shell access.
# 出现上边这句,表示链接成功。

(我第一次ieit用的自定义的大写字母,报错了,后来我把整个config文件copy过去,ieit用小写的自定义信息代替,成功了。因为在设置第二个账户的时候,我加了密码,因此会要求你输入密码。)

3、实际操作:建立本地仓库,关联远程仓库

(1) 将项目 clone 到本地, folder-name 是本地文件夹路径

git clone git@github.com:whatever folder-name

(2) 取消全局 用户名/邮箱设置,并进入项目文件夹单独设置

# 取消全局 用户名/邮箱 配置
git config --global --unset user.name
git config --global --unset user.email
# 单独设置每个repo 用户名/邮箱
git config user.email “xxxx@xx.com”
git config user.name “xxxx”

(3) 命令行进入项目目录,重建 origin
对克隆下来的文件,进行修改,如果可以push,则可以忽略此步骤。

git remote rm origin
git remote add origin git@ieit.github.com:whatever

注意

  • whatever 为相应项目地址,并且要是SSH项的地址,而非HTTPS的。如果误用了HTTPS的地址,可能会提示如下错误:

fatal: 不支持 'git@ieit.github.com:https' 协议

  • 在粘贴whatever项时,一定要看好路径,github上,是带有git@github.com:这一项的,我们要用config文件里对应的含前缀的那个,whatever就是这一项后面那部分。如果不小心,把这部分整体作为whatever使用的话,会提示如下错误:

Enter passphrase for key '/Users/username/.ssh/id_rsa_2':
fatal: 远程错误:
is not a valid repository name
Email support@github.com for help

(4) 成功,可以 push 测试一下

git push origin master

之后,你可以按照上面方法,或者你熟悉的方法去设定其他账户关联的本地仓库。这里,主要注意的就是,取消全局git账户,然后在每个仓库中,配置自己对应仓库的user.email和user.name。


\color{deeppink}{这里是分割线,下面是笔者走过的坑,可以忽略...}


第二个账户的测试
上面的8,9,我都没有运行。原本第一个账户的代码,删除全局用户名/邮箱,改成单个项目里设置,没有push代码,但是pull代码,没有问题。
我从github上用git clone拉取公司项目的时候,只在第一次要求我输入账户和密码。之后都是好用的。我用同样的方法,拉取私人账户创建的仓库是,push的时候,一直提示权限问题。在设置ssh的时候,私人账户设置了密码,但是,应该与这个无关。于是,按照github上以及8,9的命令,又来了一次:
(1)在本地新建文件夹,进入该文件夹,运行下面的命令:

$ git init
# 往该文件夹里,拖入一个文件,我是用vi新建了一个README.md文件
$ git add .
$ git commit -am "first commit"

到此,有下面提示:

因为我们用两个账户,肯定不能设置全局的,先用命令看看当前的账户是什么

$ git config user.email

运行后,什么都不显示,说明我们并没有设置,现在开始设置邮箱和用户名:

$ git config user.name "Your Name"
$ git config user.email you@example.com
$ git remote add origin git@ieit.github.com:whatever
#记得把ieit换成你在config中设置的那个值

然后push,之后又出现了error:

fatal: 不支持 'git@ieit.github.com:https' 协议

调查后,说粘贴github的仓库地址时,用SSL的,不要用HTTPS的。重新运行之前的命令,会提示“git@github.com:ieit/aaaaaa.git”
于是,我们将上面的步骤再进行一次。待到push的时候,又出错了:

Enter passphrase for key '/Users/username/.ssh/id_rsa_2':
fatal: 远程错误:
is not a valid repository name
Email support@github.com for help

这个是命令错了。仔细观察,从一开始,使用SSH的url的时候,就一直用错了,要粘贴git@github.com:后面的那段,因为前面这段我们已经变成config文件中自定义的git@ieit.github.com:,因为没仔细看,折腾了好久。至此,终于成功了。

至此,我们直接clone的,应该也是可以,只是中途我填错了url而已。

另外,作者出现了gitignore没有该文件,确无法push的问题。最后解决的方案是把那个文件夹拖出,然后push到远程,再重新创建同名文件夹,将拖出的文件件的内容copy到新建立的文件夹,然后重新push。成功!

[参考](https://www.jianshu.com/p/3fc93c16ad2d)

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

推荐阅读更多精彩内容