From: Ævar Arnfjörð Bjarmason Date: Mon, 02 Aug 2010 16:05:34 GMT Subject: Re: URL substitution and config file precedence Message-ID: In-Reply-To: <20100802153720.GA28481@fishbowl.rw.madduck.net> On Mon, Aug 2, 2010 at 15:37, martin f krafft wrote: > Dear Gits, > > I expect .git/config to tae precedence over ~/.gitconfig, which in > turn gets favoured over /etc/gitconfig. This works fine, except for > the url.….insteadOf settings. > > Have a look at the following: > >  % grep madduck: .git/config >    url = madduck:pub/puppet/modules/git > >  % grep -B1 nsteadOf /etc/gitconfig ~/.gitconfig >  /etc/gitconfig-[url "git://git.madduck.net/madduck/"] >  /etc/gitconfig: insteadOf = madduck: >  -- >  /home/madduck/.gitconfig-[url "ssh://git.madduck.net/madduck/"] >  /home/madduck/.gitconfig:       insteadOf = madduck: >  /home/madduck/.gitconfig:       pushInsteadOf = git://git.madduck.net/madduck/ > >  % git push -v >  Pushing to git://git.madduck.net/madduck/pub/puppet/modules/git >  fatal: The remote end hung up unexpectedly > > There seem to be two problems: > >  1. the value from /etc/gitconfig seems to be preferred over the >     one from ~/.gitconfig. I think this is due to the fact that the >     syntax for URL substitution is a bit whack and the two keys >     different, so the merge is actually a union-merge, and then the >     result is probably just the first match (git:// sorts before >     ssh://). Right, the git-config backend just merges on a key-value basis. It isn't smart. > Why was the syntax chosen backwards in this way? Why not have > >  [urlsubst "madduck:"] >      replaceWith = ssh://git.madduck.net/madduck/ > > or even better: > >  [url_regsubst] >      somefreelychosenname = s|madduck:|ssh://git.madduck.net/madduck/| I don't know, but it usually helps if you add the person who added the feature to the CC-list.