git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Ævar Arnfjörð Bjarmason
Message 5 of 5 in “URL substitution and config file precedence”
  1. martin f krafftAug 2, 2010
  2. Ævar Arnfjörð BjarmasonAug 2, 2010
  3. martin f krafftAug 2, 2010
  4. Ævar Arnfjörð BjarmasonAug 2, 2010
  5. Jonathan NiederAug 2, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.