From: Junio C Hamano Date: Mon, 25 Aug 2025 19:40:17 GMT Subject: Re: [RFC] Allow includeIf.hasconfig to take precedence over includeIf.gitdir Message-ID: In-Reply-To: "engdoc" 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.