Stefan Beller <sbeller@xxxxxxxxxx> writes: > On Mon, May 22, 2017 at 3:27 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: >> Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: >> >>> I liked the suggestion to make the URL a relative path, but this would >>> require you to maintain a mirror in the same places you push git.git >>> to, is that something you'd be willing to do? >> >> After thinking about this a bit more, I know what I think we want a >> bit better. >> >> Relative URL (e.g. ../sha1collisiondetection that sits next to the >> copy of git.git) may be a good way to go. I can arrange to create >> necessary repository next to git.git on k.org and github.com but I >> need to double check about other places > > And here we see another deficit with a single URL: > We have to abide by the same scheme at all hosting endpoints. FWIW, I do not see it a deficit. It is a price you may or may not be willing to pay for simplicity, and I think it is a reasonable trade-off. The .gitmodules format can be enhanced to list multiple URLs quite easily. I think the current users all use the equivalent of "git config -f .gitmodules submodule.foo.url" to grab one value. Unless the user chooses to do anything special, they will continue to get the same behaviour whensuch an enhancement happens, which is a good thing. But then, you need to design what users choose to do that is "something special". Should "git clone --recurse-submodules" have a way to control which one of the not-yet-known-before-cloning URLs that may be listed in .gitmodules? Will we have a way to say "For North American users, we recommend this URL, while Asians may want to fetch from this other URL" in .gitmodules and then the recursive clone have a way to say "I want the European option"? Would the recursive clone have a way to go interactive? And from that point of view, "you'll find the submodules relative to the superproject" convention is one way (not necessarily the only way) to allow users not to care too much. The simplicity comes with price and that is perfectly acceptable. Also a single URL scheme may still perfectly fine. .gitmodules may have new submodule.<name>.alternateURL fields and recursive clone can be told to optionally go interactive when such fields are present. Or README can list alternate URLs and instruct the users to use the insteadOf if they want to go to mirrors instead. Those users who do care about picking particular mirror are likely not favor simplicity over flexibility, so they would not likely to do a recursive clone (after all, clone is a single-time operation) and it may be sufficient if they can clone the top-level, read README and then decide how and from where they get their submodules.