Git 2.13 conditional config on windows

前端 未结 5 1692
失恋的感觉
失恋的感觉 2020-12-28 15:23

Git version: 2.13.0.windows.1

OS: Windows 7

CLI: Git bash

.gitconfig



        
相关标签:
5条回答
  • 2020-12-28 15:40

    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.

    0 讨论(0)
  • 2020-12-28 15:41

    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.

    0 讨论(0)
  • 2020-12-28 15:45

    The OP concludes that includeIf functionality does not work in normal non-git directories.

    This is provably incorrect for at least the configuration item core.sshCommand. If a conditionally included .gitconfig has a core.sshCommand configured, it is used in git clone operations in normal non-git directories.

    It seems that the part that doesn't work properly is the display of conditionally included configuration. Which is quite problematic and interferes with tracking down broken configurations.

    0 讨论(0)
  • 2020-12-28 15:47

    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
    
    0 讨论(0)
  • 2020-12-28 15:56

    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

    0 讨论(0)
提交回复
热议问题