前言 平时开发过程中可能遇到这样的问题,就是在进行公司的项目开发时要用公司的git账号,以及对应的git仓库,比如gitlab的;对于个人的开源项目,又会有自己的git账号,以及对应的git仓库,比如github或者码云(gitee)。 这时就会遇到多账户提交时的冲突问题,以及对应的多个ssh key的管理的问题。 正文
假如有两个git账户,分别是github@example.com和gitee@example.com。为了提交git,我们需要设置对应的ssh key,ssh key具体其在对应平台的配置方法比较简单。 在终端输入如下命令:
$ ssh-keygen -t rsa -C "github@example.com"终端提示如下:
Generating public/private rsa key pair. Enter file in which to save the key (/Users/XXX/.ssh/id_rsa):此时直接回车,就会在/Users/XXX/.ssh/路径下,创建一个名为id_rsa的公钥,这个并不是我们想要的,因为这里要设计多个ssh key的管理,这个命名没有任何特征。 在终端中输入如下命令:
$ /Users/XXX/.ssh/id_rsa_github表示这个是github平台的key,之后根据终端提示,输入并确认密码,就可以生成了。
Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/XXX/.ssh/id_rsa_github. Your public key has been saved in /Users/XXX/.ssh/id_rsa_github.pub. The key fingerprint is: ...同理,另一个ssh key的创建流程如下:
$ ssh-keygen -t rsa -C "gitee@example.com" Generating public/private rsa key pair. Enter file in which to save the key (/Users/XXX/.ssh/id_rsa): $ /Users/XXX/.ssh/id_rsa_gitee Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/XXX/.ssh/id_rsa_gitee. Your public key has been saved in /Users/XXX/.ssh/id_rsa_gitee.pub. The key fingerprint is:其实就是将对应的.pub中的内容,复制到对应平台的ssh key管理栏目中,不同的平台,位置不同,可以去对应的个人中心的设置中查看,很容易找到。
在/.ssh目录下创建config配置文件:
$ vim ~/.ssh/config熟悉vim的可以直接在终端中编辑这个config文件,不熟悉的,打开指定目录下新创建的config文件,直接文本编辑即可:
终端中输入如下验证命令,如果返回如下,说明配置成功了:
$ ssh -T git@github.com Hi XXXXXX! You've successfully authenticated, but GitHub does not provide shell access. $ ssh -T git@gitee.com Hi XXXXXX! You've successfully authenticated, but Gitee.com does not provide shell access.如果遇到: permission denied (publickey) 就是之前的公钥设置的问题,需要去对应的平台检查下ssh key公钥是否设置成功。 至此,ssh key的配置管理就结束了。
我们大多数人都会使用第三方工具进行git提交,比如source tree之类的,这些工具在提交时,如果不对对应的git仓库进行专门的配置,会默认走git的全局配置,也就是会用默认的全局配置的账户进行git提交。一不小心,就会用我们私人的账户,进行了公司项目的git提交,生成了对应的提交记录,也有可能因为权限问题,导致直接提交失败。 这时,我们需要对不同的仓库,进行对应的配置。
在终端中,分别输入如下命令,可以检查目前电脑中的git的全局配置信息,如果没有返回,说明没有全局配置,如果有,就可以看到对应的默认的账户是那个了。
$ git config --global user.name $ git config --global user.email为了避免麻烦,我们可以取消全局配置:
$ git config --global --unset user.name $ git config --global --unset user.email此时已经取消了电脑中默认的git全局配置信息,此时进行git提交,会报对应的找不到账户信息的错误。 我们可以cd到对应的git仓库的根目录下,执行局部git配置命令。比如/Users/XXX/github/DemoProject是一个在github平台托管的本地git仓库的根目录,我们可以执行如下命令:
$ cd /Users/XXX/github/DemoProject $ git config user.name $ git config user.email如果返回均为空,说明没有进行过局部配置,可以分别配置github的账户名和邮箱:
$ git config user.name "github账户名" $ git config user.email "github@example.com"同理,在不同的git仓库下,可以分别配置不同平台的git账户名和git邮箱。这虽然看起来麻烦,不过,只要设置完成,之后只要不再更改对应的git仓库的路径,就不需要再更换配置了。 而且,即便我们没有取消默认的全局git配置,在进行了局部配置后,后者的优先级会更高。 执行:
$ git config --list可以查看查看当前仓库的具体配置信息,在当前仓库目录下查看的配置是全局配置+当前项目的局部配置,使用的时候会优先使用当前仓库的局部配置,如果没有,才会去读取全局配置。
因为我们先前取消了电脑中的git全局配置,hexo在部署发布时,可能遇到如下问题:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com" git config --global user.name "Your Name"to set your account’s default identity. Omit --global to set the identity only in this repository. 不知道是不是因为hexo必须要求读取全局配置,设置了几个文件夹的局部git配置,均无效,只好又恢复了全局配置,也就是对应的github的账户信息,因为之前提到过
局部配置的优先级大于全局配置
所以不用担心账户冲突的问题,只要设置好对应仓库的局部配置信息,就不用担心全局配置的存在。 当然,这只是折中的方案,如果有人知道如何配置hexo仓库的局部配置信息,欢迎指教。
本文作者:霖溦 本文链接:https://kukumalucn.github.io/blog/2018/08/02/一台电脑管理多个Git账户和SSH-KEY/ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!