URL substitution and config file precedence
- From
- martin f krafft <madduck@madduck.net>
- Date
- Aug 2, 2010, 15:37 UTC
- Message-ID
- <20100802153720.GA28481@fishbowl.rw.madduck.net>
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://). 2. URL substitution is not recursive, or else the git:// URL would
eventually be replaced with the ssh:// URL.I can address both issues by adding a "pushInsteadOf = madduck:" to ~/.gitconfig, but …
… that only addresses pushing. I don't see a way to fix fetching, where the pushInsteadOf trick does not work.
Any ideas how to work around it?
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/|Thoughts?
--
martin | http://madduck.net/ | http://two.sentenc.es/
"stab it and steer"
-- sailor
spamtraps: madduck.bogus@madduck.net