前言
由于公司都有自己私有的Git仓库,如GitLab或者BitBucket,而我们自己的学习或者开源项目又难免会用到GitHub或Coding这样的公共Git库,当两边账号密码不一样时,难免就会遇到问题了,不可能说每一次去更新代码或者推代码的时候都去更新一遍用户名和密码,所以说配置一个Git多账号环境就很重要了
开始配置
初始化本地环境
安装Git这些我这里就不说了,如果不清楚的可以去 GIT安装教程 学习,我们这里说的环境初始化主要是将之前设置过的Git的配置还原一下,先用下面代码查看一下是否设置过本地的name和email
git config --global user.name
git config --global user.email
如果看到有返回就表示你已经设置过全局的用户名和邮箱了,这时候要用下面两个命令把全局配置清除
git config --global --unset user.name
git config --global --unset user.email
开始配置
首先是用你指定的邮箱生成一个本地密钥
ssh-keygen -t rsa -C "[email protected]"
上面引号中的替换成你自己的邮箱
看到这里是提示你要保存密钥的路径,可以按照格式修改名称,如 /c/Users/C-y/.ssh/coding_id_rsa,然后一路回车,就会在coding_id_rsa和coding_id_rsa.pub
然后用记事本打开.pub文件,复制其中的内容,在对应的GitHub或者Coding中去添加SSH公钥,此时就完成了一个的配置,接下来就是将你所有需要添加的不管是私有或者公共的库都重复以上方式添加到SSH公钥中就行了
最后在对应的.ssh目录下面新建config文件,内容如下
# coding email address
Host coding
HostName xxxxx.coding.net
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/coding_id_rsa
# gitlab email address
# 公司内网地址
HostName "此处可以填域名也可以填ip"
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/xxxx_id_rsa
Host 用来标记仓库的别名的,==注:当没有配置HostName字段的时候此处只能配置成域名或者IP,而不是别名了==
HostName 配置仓库的域名或者IP
User 用户名
PreferredAuthentications 强制使用Public Key验证
IdentityFile 密钥文件的路径
使用你聪明的小脑袋把上面配置改成你自己的配置就可以了,然后这时候就已经可以把你各个库中的代码拉下来了,如果你对代码中的name和email有要求,就进入到项目目录下(既有.git隐藏文件夹那一级目录),使用一下命令配置专属于那个目录的name和email
git config --local user.name xxxxxx
git config --local user.email [email protected]
遇到的问题
config配置不生效
我发现在我配置好config文件之后,配置并不生效,ssh还是连不上git服务器,然后搜索了一下,应该是rsa密钥没有被添加到ssh-agent中,所以需要用ssh-add命令去把密钥重新添加进去
先启动ssh-agent
ssh-agent
然后添加
ssh-add rsa文件路径
并且可以用
ssh-add -l
查看当前已经注册进去的密钥有哪些,但是这可能会一段时候后失效,如果每次都要ssh-add一下的话就太麻烦了
解决方法
最后找到的办法是可以在git安装目录下的/etc/bash.bashrc
目录下面添加如下代码
eval "$(ssh-agent -s)"
ssh-add rsa文件路径
这样在每次启动git-bash的时候就会自动给你把rsa添加进来了,要比之前方便得多
Intellij中使用不了
完成了上述的一顿操作之后,在git bash中总算是可以直接ssh做git操作了,但是当我正准备狂笑的时候,打开了intellij,使用里面的git插件拉代码,结果…… 又出现了
当时我就崩溃了,觉得不应该啊,又是漫长的一顿搜,发现好像Intellij的git使用的是cmd的终端,然而cmd终端在我尝试了多种方式后依然还是无法使用到ssh的授权,奔溃得我又只能继续百度
解决办法
最后在不懈努力下,终于发现了一个方法可行,就是修改ssh_config文件,windows下的目录是 ${你的git安装路径}/etc/ssh下的ssh_config文件
Host *你的访问域名*
IdentityFile *你的私钥路径地址*
例如
Host bitbucket.org
IdentityFile C:\\Users\\Sahil\\.ssh\\id_rsa
可以把你的多个私钥都添加进来,写多个Host就行,这样Intellij就可以找到你的私钥进行匹配了
写在最后
拥有了这个配置方法,终于可以工作学习两不误了,妈妈再也不用担心我为Git账号切换问题发愁了
参考