likes
comments
collection
share

github多身份Git管理-优雅的配置方式

作者站长头像
站长
· 阅读数 6

github多身份Git管理-优雅的配置方式

Git多身份管理一直是一个“痒点”,一些方法,比如:

  1. 修改 .ssh/config
  2. 项目目录里 git config
  3. 不同的认证方式(.e.g https 和 ssh 分别对应不同的环境;git 和 gh)
  4. … …

某种程度上可以处理多身份的问题,但我认为这些方式都不够灵活和“优雅”。

今天偶遇了一种方式,使用 .gitconfig中的 inclueIf ,可以完美解决这个问题,我觉得很棒,足够灵活且提供了更多可能性。

不得不说,Git 真的很强大,用了很多年,依然不够了解它!

场景

有两个GitHub账号,一个是公司的账户,一个是个人项目的账户。分别对应的ssh 私钥为id_rsa_cm和id_rsa_dt。

信息如下:

  • 个人账户
    • key:id_rsa_dt
    • user.name: dt
    • email: dt@gmail.com
    • repos: github.com/dt/xxx.git
  • 公司账户
    • key:id_rsa_cm
    • user.name: cm
    • email:cm@cm.com
    • repos: github.com/cm/xxx.git

目标

进行项目的git操作(clone、pull、push…)时,分别使用各自的配置。

环境

操作的系统为MacOS,对于Linux应该没差别, Windows环境可能在路径格式上不一样而已。

配置

Git 的全局配置文件是 ${HOME}/.gitconfig , 如果进行过诸如 git config user.name "dt" 等这样的命令,文件里的内容可能如下:

$ cat ~/.gitconfig
[user]
  name = dt
	email = dt@gmail.com
	

配置文件中还有一些配置项,可以对 git的命令和行为进行定制,比如 core.sshCommand

[core]
	sshCommand = ssh -i ${HOME}/.ssh/id_rsa

另外,.gitconfig 文件有一个很棒的功能,可以有条件地包含其他配置文件。

两者结合,为多身份管理提供里技术支持。

下面是最终的配置(已脱敏)

# config: ~/.gitconfig
[user]
	email = dt@gmail.com
	name  = dt
	
[core]
	sshCommand = ssh -i ${HOME}/.ssh/id_rsa_cm

[includeIf "hasconfig:remote.*.url:git@github.com:cm/**"]
    path = ~/.gitconfig_cm
    
# 本案例中,下面的配置与全局配置相同,可选
[includeIf "hasconfig:remote.*.url:git@github.com:dt/**"]
    path = ~/.gitconfig_dt

个人账户配置文件(可选,视配置文件而定)

# config: ~/.gitconfig_dt
[user]
	email = dt@gmail.com
	name  = dt
[core]
	sshCommand = ssh -i ${HOME}/.ssh/id_rsa_dt

公司账号配置文件

# config: ~/.gitconfig_cm
[user]
	email = cm@cm.com
	name  = cm
[core]
	sshCommand = ssh -i ${HOME}/.ssh/id_rsa_cm

这个方法完美的解决我遇到的问题,还可以处理更多更复杂的场景,比如,我还可以对 gitee 的平台使用国内的邮箱。

includeIf

有条件的包含其他配置文件的方式,可以有多种条件

  • gitdir
  • gitdir/i
  • onbranch
  • hasconfig:remote.*.url:

具体请参考https://git-scm.com/docs/git-config

Git - git-config Documentation

可能遇到的问题

  1. 遇到 ssh agent 会有bug:比如上面的场景,两个key, 但agent 中只有 id_rsa_dt , 会发现进行公司项目与github交互时,使用的key并不是 id_rsa_cm ,而是 id_rsa_dt ;解决方法也很简单:agent中加入id_rsa_cm或者不使用ssh agent
转载自:https://juejin.cn/post/7351439648592658495
评论
请登录