written by
Just4test

git 用户管理技巧

1 min read , March 30, 2020

作为使用微服务的开发者,我的电脑上有数十个git仓库。"git 用户"是每个需要提交的git仓库必须配置的。为了避免麻烦,我在全局config设定了git用户信息。

由于我的电脑同时用来写公司代码和个人开源代码,就导致了一个小问题。我的git用户设置的是github上的个人用户名和个人邮箱,导致提交到公司代码中也是个人邮箱,显得不太专业。据我观察,公司不止我一个人遇到这个问题。解决这个问题的直观方式是禁止使用全局git用户配置,并单独在每个仓库中配置用户;但这很麻烦。

今天看到一篇文章《Setting Up Git Identities》,几乎解决了这个问题。主要步骤很简单:

1. 取消全局用户配置

git config --global --unset user.name
git config --global --unset user.email
git config --global user.useConfigOnly true #避免Git在某些环境下使用系统用户配置

2. 利用git config可以存储任意文本键值对的特性,将不同场景需要的用户信息存储到git config中。以下例子配置了公司和github两个用户。但这些用户信息并不能直接被git使用。

git config --global user.github.name "NickName"
git config --global user.github.email "me@mydomain.com"
git config --global user.company.name "RealName"
git config --global user.company.email "realname@mycompany.com"

3. 利用alias特性创建一个git子命令,以使用我们在上一步创建的用户信息。

git config --global alias.id '! git config user.name "$(git config user.$1.name)"; git config user.email "$(git config user.$1.email)";'

4. 在每个git仓库中,使用上一步创建的别名命令一步设定该仓库的用户信息

git id github
#or
git id company

虽然也需要逐个仓库进行设定,但能将一长串命令大量缩短,也是个不错的办法。

还可以在此思路上延伸一下,创建一个git clone2命令,然后根据clone的url中的域名自动选择用户。不过我个人主要使用git客户端完成clone操作,就没必要了。