Re: Adding nested repository with slash adds files instead of gitlink

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Phil & Junio,

On Wed, 14 Aug 2024, Phil Sainty wrote:

> Junio C Hamano <gitster@xxxxxxxxx> writes:
> > Let me make sure I understand the above.  You create a commit to
> > contain the change in the submodule and at the same time create a
> > new commit to bind the updated submodule commit to superproject tree.
>
> I can imagine this ability also being useful, but it would be an
> independent feature from the one initially requested here...

FWIW I did not intend to suggest anything to do with submodules.

There are too many issues with submodules and I don't think they will ever
be resolved, as they simply don't integrate into the original, elegant
design of having all Git objects in the same repository.

What I had in mind (and which I described only very loosely) was to create
a super-project commit that references the modified subdirectory as part
of the same project, much like `xdiff/` files are tracked inside git/git.

Yes, I papered over the need to create at least one new tree object that
is derived from the super-project's root tree object and references the
root tree object of the "inner" commit. I did not want to go into too many
details about the technical implementation, and chose to use the `xdiff/`
example as a way to transport my idea, but apparently I was wrong to
believe that it would do a good enough job.

In essence, what I would love to have is more along the lines of how
Subversion allows you to check out just a subdirectory of the project, and
restrict the revision history to that directory in that checkout.

This is different from submodules, and also from subtrees, as it would
allow to treat `xdiff/` as a stand-alone repository, but also allow to
treat it as a tracked subdirectory of the super-project at the same time,
both equally-well integrated into the standard Git processes like `git log
-G`, `git bisect`, `git rebase`, etc.

> > But I did not get the impression that it is what the original poster
> > wants.  My reading of the original thread (this is a resurrection of
> > an antient thread dating back to 2018) was that you have a submodule
> > at path S, you muck with a file in S/file, and you want to commit in
> > the context of the superproject, having the superproject track S/file
> > in its history (not just S gitlink).
>
> That's correct.
>
> My common usage was that I would add the entire contents of S, along
> with some associated configuration outside of S, and then make a commit
> of all of that in the superproject.

This could be achieved in a very hacky way by moving the `.git` directory
of S out of the way, committing, then moving it back, right?

> The two repos (superproject and submodule S) are then tracking the files
> in S independently; so if I was to pull new changes to the submodule
> from its own upstream, git commands run from the S directory would not
> show any changes vs the state of the submodule repo, whereas commands
> run from the superproject would see new changes.

I did indeed have a more integrated thing in mind, where the commits of
the super-project that touch S and the commits of S were more connected.

Ciao,
Johannes

> Cloning the superproject repo would produce its version of S, and
> without the S/.git directory.





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux