Git 2.13 conditional config on windows

邮差的信 提交于 2019-12-20 11:49:30

问题


Git version: 2.13.0.windows.1

OS: 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

.gitconfig-work

[user]
    name = Gyandeep Singh
    email = corporate@email.com
  • Both the config files above sit together in the same directory (home).

What happened: open CLI on a folder (example test) inside corporate folder and then run git config user.email the output is private@email.com.

Expected: Outcome should be corporate@email.com.

Am I doing something wrong or my expectation is not correct? I did follow the git docs.

Solution

You have to run git config --show-origin --get user.email on a git initialized directory. If its not git initialized then the includeIf gitdir functionality will not work.

Its strange but true. I wish it still worked.


回答1:


Your global C:/Users/<user-name>/.gitconfig should have this includeIf:

[includeIf "gitdir:C:/Users/<user-name>/Documents/webstorm/corporate/"]
    path = .gitconfig-work

with having your work Git repos in C:/Users/<user-name>/Documents/webstorm/corporate and the conditional work configuration should be located at C:/Users/<user-name>/.gitconfig-work.

That's at least working for me in Window's cmd and Cmder. A git config --show-origin --get user.email should than show you from where a config value is loaded/resolved.

It also seems like the conditional work configuration is only used when issued from within a Git repository.

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



回答2:


The accepted answer, while helpful, does not answer the question.

As of this writing, includeIf only works inside a git initialized folder.

So if you cd into "~/Documents/webstorm/corporate/somegitproject" and run the command the output will be as expected:

$ cd ~/Documents/webstorm/corporate/somegitproject
$ git config user.email
corporate@email.com

This is probably a defect against git, since a user would expect this to work similarly in "~/Documents/webstorm/corporate/" as well.




回答3:


You need to turn off case sensitivity: change "gitdir:" to "gitdir/i:"

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

[includeIf "gitdir/i:C:/My/Dev/"]
path = .gitconfig-my

from:

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




回答4:


There is a typo here:

[includeIf "gitdir: ~/Documents/webstorm/corporate/"]
path = .gitconfig-work

There should be no space after gitdir::

[includeIf "gitdir:~/Documents/webstorm/corporate/"]
path = .gitconfig-work

Removing it will correct the behavior within an initialized Git repository.

This will show the entire Git configuration and what Git config files it is drawn from:

git config --list --show-origin

CAVEAT: If you run this inside a Git repository it will show values from .gitconfig-work, but it will not if you are within ~/Documents/webstorm/corporate/, but outside a Git repository.



来源:https://stackoverflow.com/questions/43919191/git-2-13-conditional-config-on-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!