On Thu, Dec 13, 2018 at 9:19 AM Yaroslav Halchenko <yoh@xxxxxxxxxxxxxx> wrote: > > Example - on http://datasets.datalad.org we have a few hundred datasets > organized into a hierarchy as git submodules. Each git submodules carries its > own .git/ directory so they are "self sufficient" and we could readily assess > their sizes, and "cut the tree" at any level without looking for the > supermodule somewhere high up in the tree. > > .gitmodules typically has relative paths for the url and path for the > submodules there, the form which I think we chose because it used to work (I > could be utterly wrong! but I think it was done in an informed fashion) > for git clone --recursive: > > $> curl http://datasets.datalad.org/labs/gobbini/famface/.gitmodules > [submodule "data"] > path = data > url = ./data > > and possibly outside: > > $> curl http://datasets.datalad.org/labs/gobbini/famface/data/.gitmodules > [submodule "scripts/mridefacer"] > path = scripts/mridefacer > url = https://github.com/yarikoptic/mridefacer So far so good. > But unfortunately git doesn't even consider such (valid AFAIK) situation > while cloning where url has to have .git suffix but repository is not bare and > a relative "data" path (or "./data" url) is referring to the worktree. > > $> git clone --recursive http://datasets.datalad.org/labs/gobbini/famface/.git [..] > Submodule 'data' (http://datasets.datalad.org/labs/gobbini/famface/.git/data) registered for path 'data' and here it goes wrong, and you would have expected to see .../gobbini/famface/data, eliding the .git ? I just checked and this did not work neither in v2.18.0 nor v2.0.0 of Git, so it is either a real old regression in submodules, or something else. Is it possible that the clone worked once without the additional .git in the superproject URL? > on the server I use the "smart HTTP" git backend, but not sure if that is the one to blame, since > I do not see in the logs any attempt to get the /data from not under .git/: If we want to strip off "/.git" of urls to make submodules work, we'd want to look at builtin/submodule--helper.c::compute_submodule_clone_url that was recently introduced. I wonder if we'd just want to cut off the "/.git" and assume the submodule is there in the worktree. Or if we need to see if the submodule was absorbed into .git/modules/<name> on the remote side. (But if the submodule is checked out both would work)