Windows上的Git 2.13条件配置

Gya*_*eep 16 windows git git-bash

Git版本: 2.13.0.windows.1

操作系统: Windows 7

CLI: Git bash

的.gitconfig

[user]
    name = Gyandeep Singh
    email = private@email.com
[push]
    default = current
[core]
    autocrlf = input
[includeIf "gitdir: ~/Documents/webstorm/corporate/"]
    path = .gitconfig-work
Run Code Online (Sandbox Code Playgroud)

的.gitconfig工作

[user]
    name = Gyandeep Singh
    email = corporate@email.com
Run Code Online (Sandbox Code Playgroud)
  • 上面的两个配置文件都位于同一目录(home)中.

发生了什么:在公司文件夹内的文件夹(示例测试)上打开CLI,然后运行git config user.email输出private@email.com.

预期:结果应该是corporate@email.com.

我做错了什么或者我的期望不正确吗?我确实遵循了git文档.

你必须git config --show-origin --get user.email在git初始化目录上运行.如果它没有初始化git那么includeIf gitdir功能将不起作用.

它奇怪但真实.我希望它仍然奏效.

rap*_*olt 22

你的全球C:/Users/<user-name>/.gitconfig应该有includeIf:

[includeIf "gitdir:C:/Users/<user-name>/Documents/webstorm/corporate/"]
    path = .gitconfig-work
Run Code Online (Sandbox Code Playgroud)

有你的工作Git repos in C:/Users/<user-name>/Documents/webstorm/corporateconditional工作配置应位于C:/Users/<user-name>/.gitconfig-work.

这至少在Window的cmdCmder中为我工作.A git config --show-origin --get user.email应该显示加载/解析配置值的位置.

似乎conditional工作配置仅在从Git存储库中发出时使用.

C:\Users\<user-name>\Documents\webstorm\corporate
? git config --show-origin --get user.email
file:C:/Users/<user-name>/.gitconfig  foo@oss.com

C:\Users\<user-name>\Documents\webstorm\corporate\some-repo
? git config --show-origin --get user.email
file:C:/Users/<user-name>/.gitconfig-work  foo@company.com

C:\Users\<user-name>\Documents\webstorm\corporate\some-non-repo-dir
? git config --show-origin --get user.email
file:C:/Users/<user-name>/.gitconfig  foo@oss.com
Run Code Online (Sandbox Code Playgroud)

  • 我必须在末尾加上一个斜杠以使其工作,例如`/ path / to / my / dir /`不能工作。 (4认同)
  • 您还应该小心在 .gitconfig 条件中使用大写驱动器号 (C:/),而不是小号。也就是说,如果您使用绝对路径。 (3认同)
  • 您针对 Git 存储库运行`git config --show-origin --get user.email` 的目录吗?在这种情况下,它不会在普通目录上使用条件配置并回退到全局配置。 (2认同)

Paw*_*och 18

您需要关闭区分大小写:更改"gitdir:""gitdir/i:"

[includeIf "gitdir/i:C:/Work/"]
path = .gitconfig-work

[includeIf "gitdir/i:C:/My/Dev/"]
path = .gitconfig-my
Run Code Online (Sandbox Code Playgroud)

从:

https://github.com/Microsoft/vscode/issues/62921#issuecomment-437693020

  • 尾部斜杠也是必需的,对我来说,没有它就无法工作。 (3认同)

rou*_*ble 8

接受的答案尽管很有帮助,但却没有回答这个问题.

在撰写本文时,includeIf仅适用于git初始化文件夹.

因此,如果您进入"〜/ Documents/webstorm/corporate/somegitproject"并运行该命令,输出将按预期进行:

$ cd ~/Documents/webstorm/corporate/somegitproject
$ git config user.email
corporate@email.com
Run Code Online (Sandbox Code Playgroud)

这可能是针对git的一个缺陷,因为用户希望在"〜/ Documents/webstorm/corporate /"中也能这样做.

  • 不是错误,请参阅[上下文]的Git邮件列表(https://public-inbox.org/git/F55DC360-9C1E-45B9-B8BA-39E1001BD620@gmail.com/)。 (2认同)
  • 这是一个问题,因为如果你想克隆一个存储库,你不能在克隆它*之前*设置你的 git 环境,只能在克隆之后设置。因此,如果您需要特定的 git 配置来克隆存储库,那就是一个棘手的情况。 (2认同)
  • @dcsan 事实证明, IncludeIf 确实在初始化的 git 存储库之外运行,并且基于动态凭据的克隆确实有效。 (2认同)
  • @MariuszPawelski 我忘记了我发表过这样的评论。从那时起,我了解到 `git clone` 实际上做的是创建空目录,cd 进入它,`git init`,_此时 IncludeIf 将起作用_,现在克隆发生,完成后,cd回到原来的目录。从用户的角度来看,看起来 IncludeIf 在 git 目录之外工作,但实际上却不然。 (2认同)

Ala*_*Dea 5

这里有一个错字:

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

后面不应该有空格gitdir:

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

删除它将更正初始化的 Git 存储库中的行为。

这将显示整个 Git 配置以及它来自哪些 Git 配置文件:

git config --list --show-origin
Run Code Online (Sandbox Code Playgroud)

警告:如果您在 Git 存储库中运行它,它将显示来自.gitconfig-work 的值,但如果您在~/Documents/webstorm/corporate/ 中,但在 Git 存储库之外,则不会显示。