git config多用户配置 - someoneHere/blog GitHub Wiki

在每一次git提交的时候,提交的记录里都会带上用户名及邮箱信息,这个信息不是在github或者gitlab上设置的,而是设置于我们的电脑中。

这在所有平台都使用同一套用户信息的时候是可以正常使用的,但有时我们需要在不同平台,甚至不同的项目中使用不同的用户信息(比如在公司gitlab使用真实姓名和公司邮箱,在github上使用网名和个人邮箱),那就需要不同的设置方案了。

下面分别介绍全局配置、按项目配置和按文件目录配置三种git配置方法。

全局配置

这是每次安装git后都会提示我们设置的,设置内容存于~/.gitconfig文件中,格式如下:

[user]
    name = youName
    email = [email protected]

当项目无特殊配置时,就会取这个文件中的设置为提交信息。

在git安装后我们可以通过以下指令来查询、修改全局配置:

git config --global user.name                           // 查询全局用户名
git config --global user.name youName                   // 修改全局用户名
git config --global user.email                          // 查询全局邮箱
git config --global user.email [email protected]     // 修改全局邮箱

项目配置

在每个git项目下,可以针对这个项目进行单独设置,这部分设置存于项目根目录的.ssh/config文件中。

当有项目设置时,取项目设置的内容,没有时才取全局配置。

我们也可以通过指令的方式来查询修改项目配置,其实就是全局配置的指令去掉--global而已:

git config user.name                           // 查询项目用户名
git config user.name youName                   // 修改项目用户名
git config user.email                          // 查询项目邮箱
git config user.email [email protected]     // 修改项目邮箱

按文件夹配置

用项目配置的方法虽然可以实现不同项目配置不同信息,但每个项目都配置一遍就太麻烦了,而且会经常出现漏配的情况,有把公司信息暴露到公共空间中风险。

使用git的Conditional Includes可以解决这个问题。

Conditional Includes可以针对文件夹来配置,配置方法如下:

~/.gitconfig添加如下代码:

## 如果是存放私人项目的文件夹,则采用另外的配置
[includeIf "gitdir:path/to/you/dir/"]
    path = ~/.gitconfig_self

gitdir:后面设置的是你想设置的文件夹目录,使用的是glob匹配模式,记得要以/结尾,否则不会生效(以/结尾,**会被自动添加上,比如you/dir/ 会变成 you/dir/**,这样才能生效到所有子文件夹)。

path的值是新配置的文件路径,我这里和全局配置放在同个目录下,方便查找。

如果有多个不同的文件夹需要设置,只需要继续添加配置即可,最终~/.gitconfig中的配置会如下:

[user]
    name = youName
    email = [email protected]

## 私人项目
[includeIf "gitdir:path/to/you/dir/"]
    path = ~/.gitconfig_self

## 工作项目
[includeIf "gitdir:path/to/work/dir/"]
    path = ~/.gitconfig_work

以上三种配置的优先级为:项目配置 > 文件夹配置 > 全局配置

本文参考

⚠️ **GitHub.com Fallback** ⚠️