Re: URL substitution and config file precedence
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Aug 2, 2010, 20:57 UTC
- Message-ID
- <20100802205748.GA2890@burratino>
- In-Reply-To
- <20100802153720.GA28481@fishbowl.rw.madduck.net>
martin f krafft wrote:
Show 23 quoted lines
> % 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://).
Almost. I do not think there is any sorting involved.
It instead seems to be an unintended consequence of the "first match wins" rule from v1.5.5-rc0~142^2 (url rewriting: take longest and first match, 2008-02-24). If we were starting over, I think it would make more sense to make the _last_ match win, which would be closer to how git configuration works in general.
> Why was the syntax chosen backwards in this way? Why not have > > [urlsubst "madduck:"] > replaceWith = ssh://git.madduck.net/madduck/
I wasn’t there, so I can’t complain. http://thread.gmane.org/gmane.comp.version-control.git/74535/focus=74594
I think you’re right, that
[fakeurl "madduck:"] url = git://git.madduck.net/madduck/ pushurl = ssh://git.madduck.net/madduck/
or similar would be more convenient to work with than
[url "ssh://git.madduck.net/madduck/"] pushinsteadof = madduck: [url "git://git.madduck.net/madduck/"] insteadof = madduck:
Jonathan