Re: Q: rational for $XDG_CONFIG_HOME/git/config to be "non global" or just a bug?
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Dec 11, 2017, 22:56 UTC
- Message-ID
- <20171211225615.GC214273@aiede.mtv.corp.google.com>
- In-Reply-To
- <20171211211102.rrxqd6yscnd33efd@hopa.kiewit.dartmouth.edu>
Hi,
Yaroslav Halchenko wrote:
Show 9 quoted lines
> Example to show that TFM outlines precedence and --global correctly: > > $> grep xdg .gitconfig .config/git/config > .gitconfig: xdg-and-user = user > .config/git/config: xdg = xdg > .config/git/config: xdg-and-user = xdg > $> git config user.xdg ; git config user.xdg-and-user > xdg > user
I agree, this is confusing.
Reverse engineering from source, I find that git reads the following files in sequence:
system: /etc/gitconfig global: $XDG_CONFIG_HOME/git/config $HOME/.gitconfig repo: $GIT_DIR/config commandline: options passed with -c or GIT_CONFIG_PARAMETERS
These terms (system, global, repo, etc) are accessible in code as current_config_scope(). I don't think there's any user-visible effect to $XDG_CONFIG_HOME/git/config and $HOME/.gitconfig both being global --- it would probably be a good cleanup to rename the scope for one of them.
I think the documentation
~/.gitconfig User-specific configuration file. Also called "global" configuration file.
should be clarified --- e.g. it could say
$XDG_CONFIG_HOME/git/config ~/.gitconfig User-specific configuration files. Because options in these files are not specific to any repository, thes are sometimes called global configuration files.
As for "git config --global", I think the best thing would be to split it into two options: something like "git config --user" and "git config --xdg-user". That way, it is unambiguous which configuration file the user intends to inspect or modify. When a user calls "git config --global" and both files exist, it could warn that the command is ambiguous.
Thoughts?
Thanks, Jonathan