Git之多个用户ID适配

举报
Serendipity·y 发表于 2022/03/30 23:14:22 2022/03/30
【摘要】 一、前言 Git 是一个分布式版本控制软件,最初目的是为更好地管理 Linux 内核开发而设计。很多著名的软件都使用 Git 进行版本控制,其中包括 Linux 内核、X.Org 服务器和 OLPC 内...

一、前言

二、背景分析

  • Git 的 git config 命令可以为 Git 设置用户名、邮箱等全局选项和配置。其有很多选项和配置,其中一个就是 includeIf 选项,它能够帮助我们在拥有多个 Git 用户的时候可以灵活的切换到对应的用户上,且使用起来非常方便。
  • 比如说,在工作时间需要处理公司的工作,不管是 GitHub 也好,还是 GitLab 也罢,同时我们又在业余的时间为开源项目提交代码做贡献,在这种情况下,肯定不想在这两种不同的情况下使用一个共同的配置,肯定是希望在不同的情况下使用不同的配置,尤其是当我们只有一台计算的话。

三、选项使用

  • 在 2017 年,Git 新发布的版本 2.13.0 包含了一个新的功能 includeIf 配置,可以把匹配的路径使用对应的配置用户名和邮箱。其中 includeIf.condition.path 变量,是 include 配置指令的一部分,其允许通过条件过滤的方式设置属于我们自己的自定义配置。includeIf 指令支持三个子关键字,分别是:gitdir、gitdir/I 和 onbranch。

① gitdir

  • 关键字 gitdir:后面的内容用于全局匹配(golb模式),如果 Git 目录与模式匹配,则满足 include 条件。Git 仓库的配置,可以由程序自己发现或者通过 GIT_DIR 环境变量来配置。该模式下,可以使用标准的通配符之外,还附加了两个额外的通配符,分别是 **//** 两种,它们用于匹配多个路径。
  • 如果该模式以~/ 开头的话,~ 将被环境变量 HOME 的内容所替代;如果模式以 ./ 开头的话,它将被包含当前配置文件的目录替换。
  • 如果该模式不以 ~/ 开头的话,则 .//**/ 将自动预置。例如,将匹配模式从 foo/bar 变为 **/foo/bar 的话,将匹配 /any/path/to/foo/bar。如果模式以 / 结束的话,** 将被自动被添加到其尾部。再例如,设置模式默认为 foo/ 的话,将变成 foo/** 这样。换句话说,它递归地匹配 foo 和里面的所有内容。

② gitdir/I

  • 关键字 gitdir/I:这与 gitdir 相同,只是匹配是大小写不敏感的,例如在不区分大小写的文件系统上。

③ onbranch

  • 关键字 onbranch:后面的数据被认为是一个模式,该模式下,可以使用标准的通配符之外,还附加了两个额外的通配符,分别是 **//** 两种,它们用于匹配多个路径。如果在工作树中,当前签出的分支的名称与模式匹配,则满足 include 条件。
  • 如果模式以 /结束的话,** 将被自动添加。例如,设置模式默认为 foo/ 的话,将变成 foo/** 这样,它匹配所有以 foo/ 开头的分支,如果分支是按层次结构组织的,并且希望将配置应用于该层次结构中的所有分支,那么这是非常有用的。
[core]
    filemode = false

[diff]
    external = /usr/local/bin/diff-wrapper
    renames = true

[branch "devel"]
    remote = origin
    merge = refs/heads/devel

; include if $GIT_DIR is /path/to/foo/.git
[includeIf "gitdir:/path/to/foo/.git"]
    path = /path/to/foo.inc

; include for all repositories inside /path/to/group
[includeIf "gitdir:/path/to/group/"]
    path = /path/to/foo.inc

; include for all repositories inside $HOME/to/group
[includeIf "gitdir:~/to/group/"]
    path = /path/to/foo.inc

; relative paths are always relative to the including
; file (if the condition is true); their location is not
; affected by the condition
[includeIf "gitdir:/path/to/group/"]
    path = foo.inc

; include only if we are in a worktree where foo-branch is
; currently checked out
[includeIf "onbranch:foo-branch"]
    path = foo.inc

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

四、内容配置

① 全局配置文件

  • ~/.gitconfig 里面原有的 user 部分需要删除掉;
  • ~/.gitconfig 里面的 includeIf 后面的 path 需要以 / 结尾;
  • 个人项目目录和公司项目目录需要是非包含关系,即非父子目录等。
# 配置文件地址
# 全局通用配置文件
$HOME/.gitconfig

# 一切献给了开源
[includeIf "gitdir:~/github_dir/"]
    # 个人项目配置文件
    path = ~/.git/.gitconfig-github

# 一切献给了工作
[includeIf "gitdir:~/working_dir/"]
    # 公司项目配置文件
    path = ~/.git/.gitconfig-working

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

② 个人项目配置文件

$ cat ~/.git/.gitconfig-github
[user]
    name = yourname-self
    email = yourname-self@gmail.com

  
 
  • 1
  • 2
  • 3
  • 4

③ 公司项目配置文件

$ cat ~/.git/.gitconfig-working
[user]
    name = yourname-self
    email = yourname-self@gmail.com

  
 
  • 1
  • 2
  • 3
  • 4

文章来源: blog.csdn.net,作者:Serendipity·y,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Forever_wj/article/details/123828892

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。