可以跨多个存储库设置 git 配置吗?

Cal*_*leb 22 shell git

Git 似乎支持三个级别的配置值:

  • 每个系统的全局设置(存储在/etc/git-core
  • 每用户全局设置(存储在~/.gitconfig
  • 每个存储库的本地设置(存储在$REPO/.git/config

这些选项涵盖了大部分基础,但我正在寻找一种处理第四级的方法。我有一个(非常)大的存储库集合,我需要为其使用与user.email平时不同的值。这些存储库通常是通过自动化脚本创建和操作的,并且为每个存储库设置本地设置很麻烦。

所有有问题的存储库都位于我本地系统上的某个路径前缀下。有没有办法在某处设置一个配置值,该值将由该路径下的所有存储库继承?(有点像.htaccess设置沿文件系统一直向上继承。)也许有一种方法可以在全局配置文件中设置条件值?在 UNIX 环境中还可以进行哪些其他安排来处理像我这样的一组存储库?

Cal*_*leb 10

我发现无法在第四级配置 git。唯一的方法似乎是使用git -c key=value.

我目前的 hacky 解决方案是定义一个 shell 函数,作为 git 的包装器。调用时,它会将参数传递给系统 git 命令,但不会在检查当前工作目录并在适用的情况下向命令添加额外参数之前传递。

function git () {
    case "$PWD" in
        /path/to/repos/*)
            command git -c user.email=alternate@credentials.org "$@"
            ;;
        *)
            command git "$@"
            ;;
    esac
}
Run Code Online (Sandbox Code Playgroud)


小智 6

根据git配置看这个解决方案:

https://dzone.com/articles/how-to-use-gitconfigs-includeif

添加到“~/.gitconfig”文件中:

    [includeIf "gitdir:~/work/project1/.git"]  
      path = .gitconfig-project1  
Run Code Online (Sandbox Code Playgroud)

创建“~/.gitconfig-project1? 文件内容:

    [core]  
      sshCommand = "ssh -i ~/.ssh/project1 -F /dev/null"  
  
    [user]  
      name = user1  
      email = user1@email.com  
Run Code Online (Sandbox Code Playgroud)


Ulr*_*gel 5

您可以使用环境变量为 git 配置电子邮件地址GIT_AUTHOR_EMAIL。如果您将此与Execute bash 脚本结合使用 zsh进入目录目录特定的 shell 配置,您可以轻松更改每个目录或父目录的设置,例如,如果您进入一个目录,~/work您可以自动调整环境变量以更改您的电子邮件地址。