文章目录
一、引文:
(因为我个人是用的码云[gitee],所以该文档则以gitee为例,github基本雷同)
[语雀搬迁–点击进入语雀传送门]
文档背景:
不少公司的代码都是通过gitlab管理的。
个人平时大多使用gitee仓库或者是github来托管自己的私有代码。
所以很可能会遇到git多账号切换的问题。
问题分析:
1、默认设置
通常我们都会把git账号设置为全局即(global), 类似于这种:
git config --global user.name "penn.ji" //配置全局用户名,如Gitee上注册的用户名
git config --global user.email "[email protected]" //配置全局邮箱,如Gitee上配置的邮箱
2、账号差别
由于公司的gitlab, 大多是使用公司的个人邮箱来管理。
而个人的gitee或者github,则一般是自己的私人邮箱来管理。
所以,大多数时候,我们是在一台电脑进行开发的。
因工作和个人的仓库地址、用户名和邮箱都不一样,很多时候一个git账号无法满足工作和个人学习并行的需求。
3、常见的解决方式:
操作不同项目时,根据项目切换git的对应配置。
缺点:
1、每次都要查看一下当前的git账号,然后每次修改都需要切换一下配置。
2、万一有哪次忘记修改,可能就会导致提交错误或者更严重的问题。
那有没有更好的同存解决方案呢?
为了解决这个问题,
该文档 便记录了我在探究这个问题的部分曲折历程以及常见的一些坑。 主要目的:
可以在windows 系统配置多个git账号,且各个账号互不影响。
从而保障我能够在同一台电脑上,根据不同账号pull或者push不同的仓库。
二、具体步骤(以gitee+gitlab为例):
范例邮箱账号:
penn.gitee@xxx.com
penn.gitlab@xxx.com
第一步:清除全局配置
如果你已经全局配置过git账号,那么一定要先把全局的配置给清除掉。
请 执行以下命令:
git config --global --list // 看一下是否配置过user.name 和 user.email
git config --global --unset user.name // 清楚全局用户名
git config --global --unset user.email // 清楚全局邮箱
第二步:删除已经生成过的密钥
如果你已经全局配置过git账号,那么你一定生成过全局ssh密钥。 这个密钥通常在 ~/.ssh 目录下。
如我的电脑密钥位置为:
C:\Users\penn.ji\.ssh
,如图:
第三步:生成新的密钥
因为你需要关联多个账号,所以同理也需要生成多个ssh密钥。【注意:需在.ssh目录下操作,否则会生成的密钥默认会存放至system的位置】
1、生成gitee的密钥
ssh-keygen -t rsa -C "[email protected]" // 根据该邮箱生成新的SSH密钥
命令行输入上面指令后,会有如下提示, 如图:
图解:
Enter file in which to save the key (/z//.ssh/id_rsa): id_rsa_gitee:提示你是否需要重新设置一个密钥名称。
ps:因为我们需要配置多个账号,所以需要设置一个密钥名称,用于区别。
gitee的密钥名称我设置为:
id_rsa_gitee
对应个人的gitee仓库:penn.gitee@xxx.com
Enter passphrase (empty for no passphrase): 输入仓库密码 切记密码不要输错了
Enter same passphrase again: 再次输入密码
2、生成gitlab的密钥
操作步骤和上面的一样,不再赘述。
为了区分,gitlab的密钥名称我设置为:
id_rsa_gitlab
对应的gitee仓库:penn.gitlab@xxx.com
第四步:添加公钥到远端仓库
如果你配置过git的全局账号,则这一步你应该已经很熟悉了,可以直接跳过。
密钥生成后,会在.ssh目录下,生成如下两个文件,如图:
图解:
id_rsa_gitee 该文件是私钥
id_rsa_gitee_pub 该文件是公钥
远端配置:
我们需要的是把密钥配置进我们的远端仓库内,此处拿gitee举例:
登陆gitee,点击右上角的设置,如图:
点击 左侧导航栏的 安全设置 中的 SSH公钥,如图:
然后把ssh密钥配置进去,
把你的id_rsa_gitee_pub文件打开,复制密钥,拷贝进去,点击确定即可。
gitlab的设置基本雷同,不再赘述。
如果设置的是gitee,你的邮箱可能会收到类似提示,如图:
以上,
为密钥生成和公钥配置。
第五步:配置密钥管理文件
为了更方便的管理多个git账号,我们需要一个config的配置文件,用来集中配置。
在.ssh目录下,创建config文件。
vim ~/.ssh/config
配置如下:
Host gitee.com
HostName gitee
User jipengju
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitee
Host gitlab.com 此处为公司的私仓地址,此处先以gitlab代替
HostName gitlab 为远端仓库的别名, 简写 例如: 配置后 [email protected] 可以写为 git@gitee
User penn.ji
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
Port 2222
配置图解:
Host ---------远端仓库的别名,简写 例如: 配置后 git@gitee.com 可以写为 git@gitee
HostName ---------远端仓库地址或IP(不支持配置端口)
User ---------仓库上的用户名
PreferredAuthentications ---------强制使用Publickey验证
IdentityFile ---------指向仓库私钥的绝对路径
Port ---------远端仓库端口,一般不需要设置,特殊情况除外
*PS:端口这个地方我踩了坑,因为公司的仓库端口没有代理。
我开始没有配置该项,由于公司仓库链接地址的默认端口为22,导致我一直测试链接不成功。
耽误了不少时间才定位到是端口的问题。
所以一定要确定公司仓库是否有端口,【如果有的话,一定要单独设置一下 Port】~~~~~~
*
第六步:添加私钥到本地
配置完公钥后,还需要再设置一下私钥,不然使用会有问题。
首先请输入命令:
ssh -v [email protected] // 查看一下ssh连接情况
会提示你是否继续连接,此处输入yes
然后输入命令:
// ssh-agent是一个linux命令,主要是用来管理密钥的。
ssh-agent-s // -s 生成Bourne shell 风格的命令输出
成功的话,你会得到类似这样的输出:
Agent pid 14578
如图:
这一步,你可能会遇到这样的问题:could not open a connection to your authentication agent.
[提示连接失败]
解决办法:命令如下:
eval `ssh-agent -s` 或者 eval "$(ssh-agent -s)"
接着继续执行私钥,将SSH key添加到ssh-agent。
ssh-add ~/.ssh/id_rsa_gitee // 将gitee私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将gitlab私钥添加到本地
如图:
这一步,你可能会出现这样的问题:Permission denied (publickey)
[提示没有权限]
可以参照官方文档排查[ [github SSH问题排除]传送门]
总结起来无非就是几种原因:
1、检查远程服务器IP和端口是否错误,确保可以正确连接
2、检查密钥密码锁是否设定有误,确保密码可以登陆远端仓库
3、检查公钥是否正确添加到远端仓库
以上均检查没问题后,
解决办法:重复执行私钥
ssh-add -k ~/.ssh/<你当前的rsa文件> // 可以把密码添加到钥匙串以后只需要ssh-add就可以了
ssh-add ~/.ssh/id_rsa_gitee // 将gitee私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将gitlab私钥添加到本地
或者这样的问题:
一直提示你密码输入错误,密码输入不通过后提示这样:
Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
我当时遇到这个问题的原因是,我把gitlab的密码输入错误导致的,解决办法和上面一样。
上一步操作正常后,
如果你在创建密钥时输了密码,则会提示:
Enter passphrase for /homex/.ssh/id_rsa:
输入创建密钥时的密码,回车即可。
添加完之后,可以使用以下命令检测私钥是否置成功。
ssh-add -l
输出如图,则证明添加成功了。
第七步:测试一下仓库连接
测试命令:
ssh -T git@gitee [第五步的Host配置过的简写] 或者 ssh -T [email protected] [全拼]
ssh -T git@gitlab [第五步的Host配置过的简写] 或者 ssh -T [email protected] [全拼]
出现类似如图提示,则证明你完成了所有的配置项,远程仓库连接成功!
第八步:单独指向设置
因为git分为 System > Global > Local 三级。 分别为:系统级、全局、仓库级。
如果没有进行此步设置,你可能会遇到push代码时, 提交的用户名变成你的系统主机名。
不要慌张,
这里需要你单独设置一下。为什么呢? 还记得第一步的时候,我们清除了global的配置吗,也就意味着,后面的配置我们不上升至全局,而只针对具体项目。
所以,
我们要对每个仓库,单独配置用户名信息。
假设我们要配置github的某个仓库,如图,我要设置components-test的git配置
我需要以仓库级(local) 设置一下当前仓库的git相关配置:
git config --local user.name "penn.ji"
git config --local user.email "[email protected]"
设置完后,查看该仓库的git配置信息:
git config --local --list
如图,则意为设置成功。
其他仓库也设置其对应的git账户信息。
DONE:恭喜你!至此你已经完成了git多账号配置的全部流程!
此时,你的git账号已经完全独立互不干扰,你可以通过不同的git账号,在不同的仓库pull或者push了!!!
完结撒花❀❀❀❀❀❀❀❀~~
以上,
就是本次配置攻略的全部过程,如果能够帮助到你, 麻烦给个小赞支持一下~~~~~
版权归原作者 penn.ji 所有, 如有侵权,请联系我们删除。