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

Re: [PATCH] submodule add: improve message when resolving a relative url fails

From
Phil Hord <hordp@cisco.com>
Date
Jul 27, 2011, 19:00 UTC
Message-ID
<4E306065.2010002@cisco.com>
In-Reply-To
<4DE660E2.9080500@xiplink.com>
On 06/01/2011 11:55 AM, Marc Branchaud wrote:
Show 25 quoted lines
> On 11-05-31 06:04 PM, Phil Hord wrote:
>> On 05/31/2011 04:57 PM, Marc Branchaud wrote:
>>>  - The current code rewrites the URL so that any relative path is either
>>>    rejected or munged into an absolute remote URL.
>> I don't see the URL getting munged away from being relative.  Can you
>> point to an example?
> I reached this conclusion because if I go into my clone of git.git and do
>
> 	git submodule add ../MyThing
>
> where ../MyThing is a regular git repo, I get
>
> Cloning into MyThing...
> fatal: The remote end hung up unexpectedly
> Clone of 'git://git.kernel.org/pub/scm/git/MyThing' into submodule path
> 'MyThing' failed
>
> So it seemed the relative URL became an absolute URL.
>
> Looking more closely at a working example, I can see that (as you show below)
> the URL in the super-repo's .gitmodules file retains the relative path, but
> the submodule's remote.origin.url is an absolute path.
>
> In any case, "submodule add" isn't doing what I expected: make my local
> MyThing repo a submodule of my git.git clone.

I thought I understood this workflow better than I actually did. I think I understand more now, and I'm somewhat disappointed. But I also failed to pick up the ball on this old discussion.

If you do this, I think it will work like you were hoping:
    :: ( mkdir MyThing && cd MyThing && git init )
    Initialized empty Git repository in /opc/git/MyThing/.git/
    :: git submodule add ../MyThing
    Adding existing repo at 'MyThing' to the index
I haven't examined the code, but I think this is how it works.  'git
submodule add' takes a URL and a local path.  When you omit the local
path, git infers one from the URL.  So these two commands are equivalent:
    :: git submodule add ../MyThing
    :: git submodule add ../MyThing MyThing

If the path you provide (explicitly or implicitly) already contains a git repo, it is assumed to be "the" submodule repo and git uses it. If it does not contain a git repo, git attempts to clone it from the (remote) URL.

Furthermore, the relative path only works for URLs. It does not work for local filesystems.

Phil
Previous: Marc BranchaudNext: Marc Branchaud
Message 10 of 40 in “Tests for some submodule corner cases.”
  1. 0/2 Tests for some submodule corner cases.Marc Branchaud, May 30, 2011
  2. 1/2 Added a test for "submodule add" using a ../relative/path/to/the/submodule/repoMarc Branchaud, May 30, 2011
  3. 2/2 Added a test for "submodule status" when the submodule's working directory has deleted files.Marc Branchaud, May 30, 2011
  4. Jens LehmannMay 31, 2011
  5. submodule add: improve message when resolving a relative url failsJens Lehmann, May 31, 2011
  6. Marc BranchaudMay 31, 2011
  7. submodule add: improve message when resolving a relative url failsJens Lehmann, May 31, 2011
  8. Phil HordMay 31, 2011
  9. Marc BranchaudJun 1, 2011
  10. Phil HordJul 27, 2011
  11. Marc BranchaudJul 29, 2011
  12. Junio C HamanoMay 31, 2011
  13. Clarified how "git submodule add" handles relative paths.Marc Branchaud, Jun 1, 2011
  14. Junio C HamanoJun 1, 2011
  15. Jens LehmannJun 1, 2011
  16. Junio C HamanoJun 2, 2011
  17. Jens LehmannJun 3, 2011
  18. Junio C HamanoJun 3, 2011
  19. Mark LevedahlJun 4, 2011
  20. Jens LehmannJun 4, 2011
  21. Jens LehmannJun 4, 2011
  22. Junio C HamanoJun 5, 2011
  23. 0/3 submodule add: allow relative repository path even when no url is setJens Lehmann, Jun 6, 2011
  24. 1/3 submodule add: test failure when url is not configured in superprojectJens Lehmann, Jun 6, 2011
  25. 2/3 submodule add: allow relative repository path even when no url is setJens Lehmann, Jun 6, 2011
  26. 0/2 Improve "git submodule add" documentation.Marc Branchaud, Jun 6, 2011
  27. 1/2 More precisely described how "git submodule add" handles relative submodule URLs.Marc Branchaud, Jun 6, 2011
  28. 2/2 Moved paragraph describing the utility of relative submodule URLs.Marc Branchaud, Jun 6, 2011
  29. 3/3 submodule add: clean up duplicated codeJens Lehmann, Jun 6, 2011
  30. Junio C HamanoJun 6, 2011
  31. Marc BranchaudJun 6, 2011
  32. Jens LehmannJun 6, 2011
  33. Jens LehmannJun 7, 2011
  34. Phil HordJun 8, 2011
  35. [PATCHv2] Clarified how "git submodule add" handles relative paths.Marc Branchaud, Jun 2, 2011
  36. Marc BranchaudMay 31, 2011
  37. Jens LehmannMay 31, 2011
  38. Marc BranchaudJun 1, 2011
  39. Junio C HamanoJun 1, 2011
  40. Jens LehmannJun 1, 2011

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.