git-config配置多用户环境以及 includeIf用法
git-config配置多用户环境以及 includeIf用法
背景
开发人员经常遇到这样的问题,公司仓库和个人仓库的用户名和邮箱配置是有区别的,为了能够很好地区分工程上传到不同的远程仓库,我们需要分别处理,保证在不同的工程使用不同的账户
介绍
Git支持多级配置,分别是
system(系统级)、global(用户级)、local(项目级)和worktree(工作区级)配置优先级:
worktree > local > global > system在Linux环境中,分别对应
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进行配置。note:- 每一个级别的配置都会覆盖上层的相同配置,所以
.git/config里的配置会覆盖/etc/gitconfig中的同名变量。 $RepoPath为某仓库的本地路径
- 每一个级别的配置都会覆盖上层的相同配置,所以
在 Windows 系统上
- Git 会找寻用户主目录下的
.gitconfig文件。主目录即$HOME变量指定的目录,一般都是C:\Documents and Settings\$USER。此外,Git 还会尝试找寻/etc/gitconfig文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
- Git 会找寻用户主目录下的
配置
常规用法
全局配置
方法一: 在
~/.gitconfig文件中添加用户名和邮箱方法二: 配置全局的
用户名和邮箱git config --global user.email "you@example.com"
git config --global user.name "Your Name"
项目仓库配置
方法一: 在
$RepoPath/.git/config文件中添加用户名和邮箱方法二: 配置项目的
用户名和邮箱# 进入 $RepoPath目录,并执行
git config --local user.email "you@example.com"
git config --local user.name "Your Name"
includeIf用法:可以在git的配置文件中使用
include和includeIf关键字来包含其它配置文件,git在解析配置文件时,会将被包含的配置文件的内容内联到 包含指令 所在的位置;所以,被包含的配置文件的配置项会覆盖包含指令之前的配置项,包含指令之后的配置项会覆盖被包含的配置文件的配置项,即,优先级是:包含指令后面的配置项 > 被包含的配置文件的配置项 > 包含指令之前的配置项;示例
[include]
path = /path/to/foo.inc ; # 绝对路径
path = foo.inc ; # 相对路径,相对于当前的配置文件
path = ~/foo.inc ; # 相对用户目录 `$HOME` 路径
gitdir和gitdir/i# 当仓库所在目录包含gitdir之后的路径才会使用.inc文件
[includeIf "gitdir:/path/to/foo/.git"]
path = /path/to/foo.inc # 所有仓库目录在gitdir之后的路径下的,都会使用.inc文件
[includeIf "gitdir:/path/to/group/"]
path = /path/to/foo.inc # 路径描述也可以用定义过的环境变量代替 $HOME/to/group
[includeIf "gitdir:~/to/group/"]
path = /path/to/foo.inc
onbranch# 包括只有当我们是在一个工作树,其中 foo-branch 目前已核实
[includeIf "onbranch:foo-branch"]
path = foo.inc
note:
- 在2017年,git新发布的版本2.13.0包含了一个新的功能includeIf配置,可以把匹配的路径使用对应的配置用户名和邮箱;
"条件类型:匹配模式"是includeIf的条件;只有当条件成立时,才会包含path选项指定的配置文件;条件类型 和 匹配模式用:分隔;条件类型共有以下几种gitdir、gitdir/i、onbranch;gitdir、gitdir/i: 路径匹配模式,表示 如果 当前 git仓库的.git 目录的位置 符合路径匹配模式, 就加载对应的配置文件;(gitdir/i表示匹配模式忽略大小写)- .git 目录的位置可能是 git 自动找到的 或是 $GIT_DIR 环境变量的值;
onbranch: 分支匹配模式, 表示 如果我们位于当前检出的分支名称 与 分支匹配模式 匹配的工作树中,就加载对应的配置文件;
匹配模式采用标准的glob 通配符再加上 表示任务路径的通配符**;path用于指定配置文件的路径;- 可以通过写
多个 path来表示包含多个配置文件;
栗子
在用户配置文件
~/.gitconfig中添加以下内容指定工程的用户配置
# 配置demo项目
[includeIf "gitdir/i:~/workspace/private/demo/.git"]
path = ~/.gitconfig_self
指定目录的用户配置
# 配置public目录
[includeIf "gitdir/i:~/workspace/public/"]
path = ~/.gitconfig_work # 配置private目录
[includeIf "gitdir/i:~/workspace/private/"]
path = ~/.gitconfig_self
指定分支的用户配置
# 配置 test-branch分支
[includeIf "onbranch:test-branch"]
path = ~/.gitconfig_self
配置子配置文件
方法一: 直接在
$path文件中添加用户名和邮箱,如:[user]
name = librarookie
email = librarookie@163.com
方法二: 用
git config -f|--file指定$path文件的用户名和邮箱git config -f $path user.name "Your Name"
git config -f $path user.email "you@example.com"
git config -f ~/.gitconfig_self user.name librarookie
git config -f ~/.gitconfig_self user.email librarookie@163.com
Referense
- https://git-scm.com/docs/git-config#_includes
- https://www.jianshu.com/p/2627ab5742a5
- https://www.codenong.com/js3a91b66ce374/
git-config配置多用户环境以及 includeIf用法的更多相关文章
- git config配置,工作区和版本库联系。
关于git和github的介绍,我这边不多说. 使用在windows下使用git,需要配置环境变量,也可以使用git自带的终端工具.,打开git bash laoni@DESKTOP-TPPLHIB ...
- git config 配置
1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...
- git第一节----git config配置
@查看git的版本 git --version @查看git配置信息 git config --list config list分全局和局部,在根目录下执行git config --list显示为全局 ...
- Git config配置
git获取帮助git help config git config --help man git-config git config --global user.name "fuleyi ...
- git config 配置简写命令
在多人协作开发时,一般用git来进行代码管理. git有一些命令如:git pull . git push等等,这些命令可以设置alias,也就是缩写. 如:git pull 是 git pl, gi ...
- git config(转载)
From:http://www.g2w.me/2013/10/cache-github-credential-for-https-repository/ http://openwares.net/li ...
- 一台电脑,两个及多个git账号配置
1. 生成两[三]个ssh公钥私钥 方法参照:http://www.cnblogs.com/fanbi/p/7772812.html第三步骤 假定其中一个是id_rsa, 另一个时id_rsa_two ...
- git config --global core.excludesfile配置gitignore全局文件
Linux中,这时把全局要忽略的文件列表.gitignore放当前用户根目录下: git config --global core.excludesfile '~/.gitignogtire' Win ...
- 设置 git config 的一些默认配置
设置 git status的颜色. git config --global color.status auto 一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一 ...
随机推荐
- 修复ST-LINK V2下载器 | ST-LINK V2下载器烧录DAPLink固件
前言 某宝上的STLINK V2下载器偶尔会坏掉,我们尝试修复一下 1.材料 (1)完好的STLINK V2下载器和坏掉的下载器各1个: (2)固件:https://gitee.com/Cai-Zi/ ...
- luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)
luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分) Luogu 题外话1: LN四个人切D1T2却只有三个人切D1T1 很神必 我是傻逼. 题外话2: 1e6的数据直接i ...
- select 中的timeout
1. select 相关man 资料 /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to ear ...
- 浅析DES原理
对称密码体制 对称密码体制:一种加密系统.其加密密钥和解密密钥是相同的,或者能够从其中之一推知另一个.对称密码体制根据对明文加密方式不同分为分组密码和流密码. 分组密码 分组密码按照一定长度(如64b ...
- Linux 下命令有哪几种可使用的通配符?分别代表什么含义?
"?"可替代单个字符. "*"可替代任意多个字符. 方括号"[charset]"可替代 charset 集中的任何单个字符,如[a-z],[ ...
- @Required 注解?
这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationExce ...
- 什么是redis的缓存雪崩与缓存穿透?如何解决?
一.缓存雪崩 1.1 什么是缓存雪崩? 首先我们先来回答一下我们为什么要用缓存(Redis): 1.提高性能能:缓存查询是纯内存访问,而硬盘是磁盘访问,因此缓存查询速度比数据库查询速度快 2.提高并发 ...
- jQuery--文档处理案例
需求 如上图,实现左右两边的选择菜单可以左右移动,'>'按钮一次只能移动被选中的一个菜单,'>>'按钮一次移动所有被选择的菜单,'>>>'按钮 将所有菜单进行移动, ...
- Vue基于webpack自动装载配置
Vue的自动装载配置是在 @cli/cli-service 包中,配置文件的目录在 lib/config/ 下的文件,css.js 文件是配置样式的处理,先从这里开始了解把 CSS配置流程 对应着这 ...
- 什么是切点JoinPoint?
程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理. 在 Spring AOP 中, join point 总是方法的执行点.