Re: [RFC] Allow includeIf.hasconfig to take precedence over includeIf.gitdir
From: Junio C Hamano <hidden>
Date: 2025-08-25 19:40:20
"engdoc" [off-list ref] writes: [administrivia: please wrap overly long lines]
Background: Currently, when both includeIf.gitdir and includeIf.hasconfig conditions match for a repository, Git always processes gitdir first, regardless of the order in the config file.
Is that true? I created an empty repository in /var/tmp/x/includeIf
and added this in its .git/config file:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[includeIf "hasconfig:remote.*.url:*"]
path = /var/tmp/x/includeIf/.git/hasRemote
[includeIf "gitdir:/var/tmp/x/includeIf/.git"]
path = /var/tmp/x/includeIf/.git/Here
[remote "this"]
url = .
where hasRemote and Here each have a single line
[jch] included = hasRemote # in hasRemote
[jch] included = Here # in Here
With that preparation done, I tried
$ git config list --local --includes
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
includeif.hasconfig:remote.*.url:*.path=/var/tmp/x/includeIf/.git/hasRemote
jch.included=hasRemote
includeif.gitdir:/var/tmp/x/includeIf/.git.path=/var/tmp/x/includeIf/.git/Here
jch.included=Here
remote.this.url=.
Notice that the multi-valued configuration variable jch.included
gets hasRemote first and then Here second.
Then I swapped the two includeIf in the .git/config file and ran the
experiment again.
$ git config list --local --includes
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
includeif.gitdir:/var/tmp/x/includeIf/.git.path=/var/tmp/x/includeIf/.git/Here
jch.included=Here
includeif.hasconfig:remote.*.url:*.path=/var/tmp/x/includeIf/.git/hasRemote
jch.included=hasRemote
remote.this.url=.
I do not doubt that you are having some problem, but it does not
look to me that your description above points to the source of the
problem.