工做、开源两不误:Git多帐号管理

因为 Git 所具备的巨大优越性,愈来愈多的公司以及我的开始由 Svn 转向 Git 。通常来说,每位员工都会被分配给一个公司内部的邮箱。好比一个 996 公司的员工 “张三”,得到的可能就是一个 “zhangsan@996icu.com” 的邮箱。比较规范的公司,就会要求咱们使用本身的名字和公司所分配给本身的这个邮箱来配置 Git(姓名和邮箱能够不用引号括起来):git

git config --global user.name "张三"
git config --global user.email "zhangsan@996icu.com"

可是这种配置是全局的,若是咱们以前恰好有在 GitHub 上维护项目,那这样势必就会将以前所作的 Git 帐户配置给覆盖了。那怎么解决呢?咱们总不能来回覆盖,来回添加密钥吧。咱们能不能同时配置多个 Git 帐户呢?github

固然能。shell

这里以 Mac 为例,若是咱们以前配置过全局的用户名和邮箱,那么在用户目录下的.gitconfig文件中(如/Users/zhangsan/.gitconfig),会有相似以下的配置:vim

[user]
    name = 张三
    email = zhangsan@gmail.com

固然,咱们也能够直接使用命令来查看:缓存

git config --global user.name
git config --global user.email

若是设置了这两个全局属性,就会输出对应的值。若任何输出的话,则表示未设置。安全

若是设置过,咱们就须要将用户名和邮箱这两个全局变量进行重置。使用以下命令:bash

git config --global --unset user.name 
git config --global --unset user.email

咱们知道,通常 Git 服务器为了安全,都会要求咱们添加一个安全的 SSH 密钥。可是默认状况下,生成的密钥的文件名都是同样的。于是,不一样的用户,必须设置不一样文件名的密钥文件,不然会发生覆盖。因此,接下来千万别以为太熟悉不过了,就一路回车,千万要悠着点手速。服务器

以 “张三” 为例,首先,咱们须要根据公司邮箱来生成密钥对:app

ssh-keygen -t rsa -C "zhangsan@996icu.com"

回车后会出现下面这句话:ssh

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

这时候可千万别一路回车,注意看提示,这里要咱们输入要保存的私钥的路径和文件名,为了之后易找,咱们就仍然放在该路径下,只不过更改个跟平台相关的文件名,输入:

Users/zhangsan/.ssh/996icu_id_rsa

接着就能够一路回车了,默认密码为空便可。

生成完密钥以后,咱们还须要使用ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在/usr/bin/ssh-add,用法以下:

ssh-add -K ~/.ssh/996icu_id_rsa

以后咱们须要将生成的密钥对中的公钥里的内容用文本编辑器打开,复制下来,添加到对应的平台上面,好比公司的 GitLab 或者 GitHub 等。

Mac 下面能够直接使用以下命令来把公钥复制到剪切板:

pbcopy < ~/.ssh/996icu_id_rsa.pub

一样地,咱们使用 “zhangsan@gmail.com” 这个邮箱,来生成供 GitHub 使用的帐户的私钥github_id_rsa和公钥github_id_rsa.pub,并把公钥添加到 GitHub 平台上。

接下来咱们还须要修改 Git 的本地配置,来将远程的服务器地址和本地的私钥文件进行关联。这样经过比较私钥和以前填在该平台上的公钥,就能进行权限验证。

Users/用户名/.ssh/目录下面新建一个名为config的配置文件,添加以下内容:

# github email address
Host github
HostName github.com 
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

# gitlab email address
# 公司内网地址
HostName 192.168.6.106 
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/996icu_id_rsa

这里就将远程地址和本地的私钥文件对应了起来。

配置文件中的 HostName 是远程仓库的访问地址,这里能够是 IP,也能够是域名。Host 是用来拉取的仓库的别名,配不配置都行。若是 HostName 没配置的话,那就必须把 Host 配置为仓库 IP 地址或者域名,而非别名。

配置了这些以后,咱们就可以成功的从远程拉取仓库了,拉取以后,cd到仓库目录下,配置该仓库使用的用户名和邮箱:

git config --local  user.name 张三
git config --local user.email zhangsan@996icu.com

固然,你也能够直接不用 --local参数

注意,这里的帐户能够和咱们开始时生成秘钥的邮箱不一样。那个邮箱其实配置的是咱们电脑针对某个 IP 的 “全局” 帐户(注意,不是global参数指定的那个全局),这里配置的是某个仓库下的 “局部” 用户,固然,你把这个仓库再 copy 一份的话,就能够设置个其余的用户名和邮箱了,毕竟是局部的嘛,至关于多个用户在同一台电脑上进行工做。

还有,若是你未指用户名和邮箱的话,Git 会自动使用电脑登陆的用户名,好比“zhangsan”,邮箱默认就是 “zhangsan@zhangsan.local”,这固然不是咱们想要的,因此最好配置下吧。

到这里,还没完。若是你使用的是 IDEA,好比 AS,还须要设置 SSH 使用本地(native)的客户端,而非 AS 内嵌(build in)的 SSH 客户端 :

在AS 3.5 Canary 10 版本上,发现没有这个选项,应该是默认使用了本地的 SSH 客户端。

到这里仍然没有完,对于 Mac,可能会遇到升级系统或者重启系统以后,SSH私钥失效的问题,这时候咱们能够经过在~/.ssh/config文件中添加以下内容来解决:

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/github_id_rsa
   IdentityFile ~/.ssh/996icu_id_rsa

若是还不生效,那就能够经过本身编写 shell 脚本
(这里我使用的是 zsh,因此配置的是#! /bin/zsh,若使用的是系统自带的终端,能够修改成#! /bin/bash):

vim .ssh/ssh_add_private_keys.sh
#! /bin/zsh
# 添加 github 公钥
ssh-add ~/.ssh/github_id_rsa
# 添加 公司 gitlab 公钥
ssh-add ~/.ssh/996icu_id_rsa

// 赋予sh文件可运行权限
chmod +x .ssh/ssh_add_private_keys.sh

而后把它添加到开机启动项中:系统偏好设置>用户与群组>登陆项

固然,咱们也能够建立一个Automator任务,并将其添加到系统开机启动项中。

而后建立一个 App 应用程序:

添加 shell 脚本代码:

而后按Command+S保存,文件名另存为ssh_add_private_keys.app

而后把刚才添加的这个APP添加到开机启动项中:

固然,上面这两种添加方式本质上都是同样的,只不过一个是建立的.sh的 shell 脚本文件,而一个是运行 shell 脚本的 App 文件形式。

欢迎关注公众号来获取其余最新消息,有趣的灵魂在等你。

相关文章
相关标签/搜索