同一台电脑上管理多个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 "[email protected]"

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

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 [email protected]

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

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 [email protected]命令就需要添加参数来执行。如下:

$ ssh -T -i my_rsa [email protected]

以上参考使用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 "[email protected]"

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

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 [email protected]
ssh -T [email protected]
# Hi IEIT! You've successfully authenticated, but GitHub does not provide shell access.
# 出现上边这句,表示链接成功。

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

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

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

git clone [email protected]:whatever folder-name

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

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

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

git remote rm origin
git remote add origin [email protected]:whatever

注意

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

fatal: 不支持 '[email protected]:https' 协议

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

Enter passphrase for key '/Users/username/.ssh/id_rsa_2':
fatal: 远程错误:
is not a valid repository name
Email [email protected] for help

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

git push origin master

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



第二个账户的测试
上面的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 [email protected]
$ git remote add origin [email protected]:whatever
#记得把ieit换成你在config中设置的那个值

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

fatal: 不支持 '[email protected]:https' 协议

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

Enter passphrase for key '/Users/username/.ssh/id_rsa_2':
fatal: 远程错误:
is not a valid repository name
Email [email protected] for help

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

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

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

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

你可能感兴趣的:(同一台电脑上管理多个git账户)