Subject: Re: remote#branch

From: Theodore Tso <[email-masked]>
Date: Mon, 29 Oct 2007 17:49:25 -0400

On Mon, Oct 29, 2007 at 11:17:12AM -0700, Linus Torvalds wrote:
> Git remote names already aren't "url"s in the http sense. 
> 
> We say "master:some.host/file/goes here/without/any/stupid/web-escapes" 
> for the ssh names, and the same goes for "file:///name here" etc.
> 
> People who think that git URL's are web-pages had better wake up and smell 
> the coffee. They aren't. They never were. They never *should* be.

Well, the confusion is that we refer to things that look like
"git://git.kernel.org/pub/scm/git/git.git" as if it were a URL.  In
fact, you did so yourself in the last paragraph above.  "People who
think that git URL's"....  but in fact, whether or not Universal
Resource Locators (URL's) in the RFC 3986 sense requires quoting
doesn't matter whether or not they are web pages or not.  If they are
formal URL's in the sense of RFC 3986, it doesn't matter whether they
are http URL's, or ldap URL's, or telephone URL's, etc. they are
supposed to be quoted whether or not they appear in a web form or not.
The whole point of URL's is that they are *uniform*.

So what that means is the much more correct statement is:

"People who think the names that people specify that to git, which
sometimes include names that look very much like URL's, especially
when they begin 'git://' or 'http://', and they think they are really
RFC 3986 URL's had better wake up and smell the coffee.  They aren't.
They never were.  The they never *should* be.  

The best that we can say given existing usage is that what git accepts
is a superset of what is allowable by RFC 3986 syntactically, and that
git in general doesn't do any URL-style quoting, even when given a
name that looks syntactically like a http-style URL that begins
'http://'."

What this means in practice though is that people would be well
advised not to pick locator names (NOT URL's) that contain characters
that normally would require escaping by RFC 3986 rules, since the
inconsistency of whether tools that expect URL-style quoting rules
will probably cause user and tools confusion.  Hence, it would
probably be a bad idea to place a directory pathname that included the
'#' character on a web server and expect that resulting git:// and
http:// names generated by an Apache web server and gitweb scripts to
do sane things, not to mention direct access via git:// names used
when you do a "git push" to said respository.  Sometimes the name will
require RFC 3968 quoting, and sometimes it may not be quoted using RFC
3968 rules, depending on which tool you are using.

I do agree that the Cogito '#' notation makes things worse, not
better, because it encourages a bigger separation between the RFC 3986
rules, and what the git tool accepts in practice --- which are not
URL's, no matter how much some of our git-style names superficially
look like URL's.   

							- Ted