能否基于HTTP地址设置Git全局默认user.name?
嘿,这个需求完全可以实现!不过你之前尝试的方式不对——Git 的 http.* 配置段是专门用来管理 HTTP 连接相关设置(比如代理、SSL 验证)的,并不支持嵌套 user.name 这类顶级配置项,所以才会生成无效的配置结构。
下面是正确的实现方式,用到 Git 2.13 及以上版本支持的 includeIf 条件配置 功能:
步骤1:创建单独的用户配置文件
先在你的用户目录下新建一个专门的配置文件,比如命名为 ~/.gitconfig-foo-bar,内容如下:
[user] name = test email = test@example.com # 通常建议同时配置邮箱,避免Git提交警告
步骤2:在全局Git配置中添加条件引用
打开全局配置文件 ~/.gitconfig(或者用 git config --global --edit 命令编辑),添加以下规则:
[includeIf "hasconfig:remote.*.url:https://foo.bar/**"] path = ~/.gitconfig-foo-bar
规则说明
这个 includeIf 的意思是:当当前仓库的任意远程仓库URL匹配 https://foo.bar/**(即所有以 https://foo.bar/ 开头的远程地址)时,就加载我们刚才创建的配置文件。
加载的配置优先级是:仓库本地配置 > 条件引用的配置 > 全局配置,所以这个特定地址的user设置会覆盖全局的user配置,但不会影响其他仓库。
验证是否生效
你可以克隆一个 https://foo.bar/ 下的仓库,或者在已有的对应仓库里运行:
git config user.name
如果输出是 test,就说明配置生效了。
为什么之前的命令无效?
Git 的配置结构是分层的:
[user]是顶级配置段,用来设置全局或仓库级的用户信息[http "https://github.com/"]是http段的子配置,只能设置 HTTP 相关的参数(比如proxy、sslVerify)
你之前运行的 git config --global http."https://foo.bar/".user.name test,会生成如下无效配置:
[http "https://foo.bar/"] user.name = test
这不符合Git的配置规范,因为 user.name 不属于 http 段的合法配置项,所以Git不会识别这个设置。
内容的提问来源于stack exchange,提问作者t3chb0t

