From: Per Cederqvist Date: Fri, 04 Jul 2025 06:42:56 GMT Subject: Re: Allowing "/" in the name of a git remote is a strange choice Message-ID: In-Reply-To: On Fri, Jul 4, 2025 at 6:51 AM Junio C Hamano wrote: > > Per Cederqvist writes: > > > Today I realized that git accepts "/" in a remote name. > > > > This can lead to problems. I have a repository that contains a branch > > called "master" and another called "chat/master". Just for fun, I > > added a second remote in this repository and named it > > "origin/chat". > > > > Now, does "refs/remotes/origin/chat/master" refer to the branch > > "chat/master" from "origin", or the branch "master" from > > "origin/chat"? Git seems to think it refers to both: > > That would have been a fun experiment ;-) It was. Luckily I figured this out while trying to deduce the allowed format of a remote name by reading the source code, not while trying to understand confusing behaviour from git. > > If it was up to me, I'd add a check to valid_remote_name() to ensure > > the name doesn't contain any "/" character. I doubt it is used often. > > If your remote-naming discipline is to always use two-levels > (e.g. origin/chat, origin/chien, origin/lapin but never origin or > origin/chat/blanc mixed in), then there is no confusion. > > It becomes only confusing if you mix origin and origin/chat. > > So it is not like we can just forbid '/' retroactively and expect no > repercussions, especially given that I hear there are more than a > few thousands of existing Git users in the world. I wonder how many use "/" in a remote name, though. My guess is very few. If you want to do anything about this, there are a few possible ways: - forbid "/", but add a setting that allows it. Note that even if you forbid "/", existing clones will continue to work. It is only when you add a new remote that the name is checked. - require that the number of "/" character in a remote is equal for all remotes in a particular clone - deperecate "/" and start warning about it now, and forbid it after a suitable period /ceder