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

Re: Why does 'submodule add' stage the relevant portions?

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Mar 26, 2013, 07:57 UTC
Message-ID
<CALkWK0mXOHGJHQ85mMuoUyzti6b2QoijN1EEFzpJ+TKm3tWnXg@mail.gmail.com>
In-Reply-To
<5150D655.8000204@web.de>
Jens Lehmann wrote:
Show 18 quoted lines
> Am 25.03.2013 20:57, schrieb Ramkumar Ramachandra:
>> Doesn't that sound horribly crippled to you?  Is there any advantage
>> to leaving the .git directory inside the submodule?  Isn't it always
>> better to relocate it?
>
> It's not crippled at all, that is just the way it was from submodule
> day one. And no, it isn't always better to relocate it. E.g. when
> you want to be able to just tar away work tree and history someplace
> else because you don't have (or don't want) an upstream to push to,
> you'd be very surprised a "submodule add" moved your .git directory
> someplace else effectively nuking the backup of your history and
> refs (guess under what circumstances you'll notice that). While I
> believe most submodule users would benefit from such a relocation, I
> consider the other use cases as valid and we would introduce silent
> breakage on them. On the other hand I made all relevant commands
> complain loudly about the .git directory in the submodule's work
> tree when it matters, so users can do something about it when they
> need it and are told so.
I see.  Thanks for the explanation.
Show 6 quoted lines
>> Why a new subcommand?  Is there a problem if we do the relocation at
>> the time of 'add'?  Will some user expectation break?
>
> For me relocation at the time of 'add' would be ok with a new option
> (and it might also make sense to have a config option changing the
> default for users who want that), but not as the default.
Makes sense.  This seems trivial to implement: I'll get to work on it soon.
Show 6 quoted lines
> And leaving aside 'add', there are tons of submodules out there
> which were cloned with older Git who have their .git directory
> inside the work tree. So a new subcommand (or at least a helper
> script in contrib) to relocate the .git directory would really help
> here to migrate these legacy submodules without users having to
> worry about data loss.

The question is: after using a "non-relocated submodule" for some time, will the user suddenly decide to make it a "relocated submodule" one day?

Show 8 quoted lines
>> I meant a variant of add that would clone, but not stage.  I was
>> arguing for a new subcommand so that I don't have to touch 'submodule
>> add', not for a rename.
>
> Ah, now I get it, I was confused by your reference to 'git submodule
> add <repository> <path>'. I have to admit I still don't understand
> the use case you have for adding a submodule without staging it, but
> maybe it is just too late here.

I usually reset after running 'git submodule add', because I rarely commit the added submodule immediately after adding it.

Previous: Jens LehmannNext: Jens Lehmann
Message 7 of 18 in “Why does 'submodule add' stage the relevant portions?”
  1. Ramkumar RamachandraMar 24, 2013
  2. Jens LehmannMar 25, 2013
  3. Ramkumar RamachandraMar 25, 2013
  4. Jens LehmannMar 25, 2013
  5. Ramkumar RamachandraMar 25, 2013
  6. Jens LehmannMar 25, 2013
  7. Ramkumar RamachandraMar 26, 2013
  8. Jens LehmannMar 26, 2013
  9. Junio C HamanoMar 25, 2013
  10. Ramkumar RamachandraMar 25, 2013
  11. Jonathan NiederMar 25, 2013
  12. Ramkumar RamachandraMar 25, 2013
  13. Junio C HamanoMar 25, 2013
  14. Ramkumar RamachandraMar 25, 2013
  15. Jonathan NiederMar 25, 2013
  16. Ramkumar RamachandraMar 25, 2013
  17. Jonathan NiederMar 25, 2013
  18. Duy NguyenMar 26, 2013

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.