前言
你是不是曾遇到过这样一个问题,公司仓库往往为了满足公司 git 规范,往往需要全局配置用户名和邮箱,但是我们平时也活跃在男性交友论坛(github)上,这个时候我们个人仓库的用户名和邮箱配置是有区别的,为了能够很好地区分工程上传到不同的远程仓库,我们需要分别处理,保证在不同的工程使用不同的配置信息。
Git 多层级配置
多层级配置在 git 支持中,分别是 system(系统级)、global(用户级)、local(项目级)和 worktree(工作区级)
- 配置优先级: worktree > local > global > system
配置解释
- system
/etc/gitconfig: 系统级配置文件,对系统中所有用户都适用的配置。使用 git config –system 读写的就是这个文件。
- global
~/.gitconfig: 用户级配置文件,用户目录下的配置文件只适用于该用户。使用 git config –global 读写的就是这个文件。
- local
$RepoPath/.git/config: 项目级配置文件,当前项目的 git 仓库目录中的配置文件,也就是工作目录中的 .git/config 文件,这里的配置仅仅针对当前项目有效。使用 git config –local 或 省略 local 参数,读写的就是这个文件。
- worktree: 工作区级配置,此配置仅仅针对当前工作区有效。使用 git config –worktree 进行配置。
Git 动态配置
假设有 A,B,C 分支,每个分支或许提交使用的用户信息与工作区或者当前用户下的不一样,如果你遇到这样的项目,可以单独进行配置,但是如果有很多这样的项目再单独配置的话就很麻烦,也容易遗漏掉某些配置,我们可以在用户级、系统级配置文件中,通过** includeIf **配置项来有条件地加载指定配置文件,他可以根据当前 git 项目的目录来设置,也可以根据当前 git 项目的当前分支来设置,这样就能实现针对不同的仓库、分支来加载不同的配置。
指定目录
根据 git 项目的目录来加载对应的配置文件
1 | [includeIf "gitdir:~/**/指定的目录/**"] |
指定分支
如果我们位于当前分支名称匹配
1 | [includeIf "onbranch:分支名字"] |
自定义配置写入
在配置文件对应的配置文件的路径中编写你需要设置,还可以通过带-f(等同于–file)选项的 git config 命令直接将配置项写入指定配置文件中,如下
1 | git config -f 对应的配置文件的路径 user.email siguoduan@gmail.com |
对于个人用户来说,可以把通用的设置到 global 层,不通用的设置到具体的某个仓库或者仓库的工作目录中。如果主机会有多个用户用不同的用户名登录使用,那可以把通用的放到 system 层的配置中。