On Wed, May 01, 2019 at 02:18:34PM +0200, Ævar Arnfjörð Bjarmason wrote: > We can make it fancier, but we already deal with this, e.g. if you do > "git config -l" we'll show "include{,if}" directives at the same "level" > as other "normal" keys. We show them, but we _do_ interpret them if the caller asks for it with --includes (which defaults to on when doing the usual "look in all files"). I think we'd have something similar here, where the caller can ask to apply excludes or not. > We also provide no way in "git config" to properly interpret a > value. E.g. does a "user.email" showing up twice for me mean I have two > E-Mails at the same time, or does the last one win? We both know the > answer, but git-config itself doesn't, and that information lives in > docs/code outside of it. > > Similarly we'd just print a sequence of: > > user.name=foo > user.email=bar > exclude.key=user.* > user.name=baz > > And it would be up to some "smarter" reader of the config data to > realize that the end result is one where we have no "user.email" set, > and "user.name=baz". > > But yeah, optionally having some new --list-normalized or > --list-after-excludes or whatever would be great, and presumably not > hard if we had some central "excludes" mechanism... I think that is all because "--list" really is just about dumping all values, not about interpreting. If we had an exclude mechanism, then I'd expect: git config user.name to apply it just like git_config_get_string() would. Because of its lack of interpretation, I don't think --list is actually good for much besides debugging. Some scripts do use it to avoid making a bunch of individual git-config calls, but they'd be much better served by a --stdin mode which let you feed in a sequence of operations ("I want x.y.z, as a single last-one-wins value, and interpreted as a bool") and get a sequence of outputs. -Peff