Thanks everyone for your comments. Here's an update. Jonathan Tan (2): config: make git_config_include() static config: include file if remote URL matches a glob Documentation/config.txt | 12 ++++ config.c | 133 ++++++++++++++++++++++++++++++++++++--- config.h | 44 ++++--------- t/t1300-config.sh | 118 ++++++++++++++++++++++++++++++++++ 4 files changed, 265 insertions(+), 42 deletions(-) Range-diff against v3: 1: b2dcae03ed = 1: b2dcae03ed config: make git_config_include() static 2: 1c1a07a0b6 ! 2: 3b3af0da98 config: include file if remote URL matches a glob @@ Documentation/config.txt: all branches that begin with `foo/`. This is useful if + The data that follows the keyword `hasremoteurl:` is taken to + be a pattern with standard globbing wildcards and two + additional ones, `**/` and `/**`, that can match multiple -+ components. The rest of the config files will be scanned for -+ remote URLs, and then if there at least one remote URL that -+ matches this pattern, the include condition is met. ++ components. The first time this keyword is seen, the rest of ++ the config files will be scanned for remote URLs (without ++ applying any values). If there exists at least one remote URL ++ that matches this pattern, the include condition is met. ++ +Files included by this option (directly or indirectly) are not allowed +to contain remote URLs. @@ t/t1300-config.sh: test_expect_success '--get and --get-all with --fixed-value' + git -C hasremoteurlTest config --get user.ssm && + test_must_fail git -C hasremoteurlTest config --get user.no +' ++ ++test_expect_success 'includeIf.hasremoteurl forbids remote url in such included files' ' ++ git init hasremoteurlTest && ++ test_when_finished "rm -rf hasremoteurlTest" && ++ ++ cat >"$(pwd)"/include-with-url <<-\EOF && ++ [remote "bar"] ++ url = bar ++ EOF ++ cat >>hasremoteurlTest/.git/config <<-EOF && ++ [includeIf "hasremoteurl:foo"] ++ path = "$(pwd)/include-with-url" ++ EOF ++ ++ # test with any Git command ++ test_must_fail git -C hasremoteurlTest status 2>err && ++ grep "fatal: remote URLs cannot be configured in file directly or indirectly included by includeIf.hasremoteurl" err ++' + test_done -- 2.34.0.rc2.393.gf8c9666880-goog