git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Nigel Magnay" <nigel.magnay@gmail.com>
To: "Pierre Habouzit" <madcoder@debian.org>, "Git ML" <git@vger.kernel.org>
Subject: Re: git submodules
Date: Mon, 28 Jul 2008 21:23:39 +0100	[thread overview]
Message-ID: <320075ff0807281323l51bb6478j30e3e4c490974a70@mail.gmail.com> (raw)
In-Reply-To: <20080728162003.GA4584@artemis.madism.org>

>
> While trying to sum up some things I'd like submodules to do, and things
> like that, I came to ask myself why the heck we were doing things the
> way we currently do wrt submodules.
>
> This question is related to the `.git` directories of submodules. I
> wonder why we didn't chose to use a new reference namespace
> (refs/submodules/$path/$remote/$branch).
>
I'm maybe being a bit slow - what would be the contents of (say)
refs/submodules/moduleA/remotes/origin/master ? The ref
that's currently in moduleA/.git/refs/remotes/origin/master ?

> This would have the net benefit that most of the plumbing tasks would be
> easier if they have to deal with submodules, because they aren't in this
> uncomfortable situation where they have to recurse into another git
> directory to know what to do.
>
> It also has the absolutely nice property to share objects, so that
> projects that replaced a subdirectory with a submodule don't see their
> checkouts grow too large.
>

Ah.. are you meaning that the top-level repository contains all the
commits in all the submodules?

> We probably still want submodules to act like plain independant git
> repositories, but one can still *fake* that this way: submodules have
> only a .git/config file (also probably an index and a couple of things
> like that, but that's almost a different issue for what I'm considering
> now) that has the setting:
>
>    [core]
>        submodule = true
>
> This could make all the builtins look for the real $GIT_DIR up, which in
> turn gives the submodule "name". Then, for this submodule, every
> reference, remote name, ... would be virtualized using the
> "remote/$submodule_name" prefix. IOW, in a submodule "some/sub/module"
> the branch "origin/my/topic/branch" is under:
>  refs/submodules/some/sub/module/origin/my/topic/branch
>  <-- submod. --><-- submod.  --><-- --><--  branch  -->
>     namespace       path/name   remote
> Note that this doesn't mean that we must rip out .gitmodules, because
> it's needed to help splitting the previous reference name properly, and
> for bootstrapping purposes.
>

I was thinking a bit about submodules (because of the earlier
discussions about submodule update only pulling from origin, and the
associated difficulties) and started wondering if the best place for
the git repository for (say) submoduleA was really
<...>/submoduleA/.git/<> and not (say) something like
.git/submodules/submoduleA/<>. This would be nicer for people trying
to pull revisions from you because they could easily find submodule
repositories regardless or not of whether they currently exist in your
WC.

I got as far as looking at discussions around .gitlink but ran out of
avaiable time.

>
> Having that, one can probably extend most of the porcelains in _very_
> straightforward ways. For example, a local topic branch `topic` would be
> the union of the supermodule `topic` branch, and all the
> `refs/submodules/$names/topic` ones.
>
> Most importantly, it would help implementing that tries to make your
> submodules stay _on branch_. One irritating problem with submodules, is
> that when someone else commited, and that you git submodule update,
> you're on a detached head. Absolutely horrible. If you see your current
> branch (assume it's master), then when you do that, you would update
> your `refs/submodules/$name/master` references instead and keep the
> submodule HEADs `on branch`. Of course we can _probably_ hack something
> together along those lines with the current setup, but it would be _so_
> much more convenient this way...
>

For me, if I'm on heads/blah in the superproject, I probably want to
be on heads/blah in *all* submodules. But that's maybe just me.

  parent reply	other threads:[~2008-07-28 20:24 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-28 16:20 git submodules Pierre Habouzit
2008-07-28 16:23 ` Pierre Habouzit
2008-07-28 20:23 ` Nigel Magnay [this message]
2008-07-28 20:55   ` Pierre Habouzit
2008-07-28 20:59     ` Pierre Habouzit
2008-07-28 21:40       ` Avery Pennarun
2008-07-28 22:03         ` Pierre Habouzit
2008-07-28 22:26           ` Jakub Narebski
2008-07-28 22:41             ` Junio C Hamano
2008-08-17 20:13               ` Pierre Habouzit
2008-08-17 22:54                 ` Avery Pennarun
2008-08-17 23:08                 ` Junio C Hamano
2008-08-18  0:46                   ` Pierre Habouzit
2008-07-28 22:32           ` Avery Pennarun
2008-07-28 23:12             ` Pierre Habouzit
2008-07-29  5:51         ` Benjamin Collins
2008-07-29  6:04           ` Shawn O. Pearce
2008-07-29  8:18             ` Nigel Magnay
2008-07-29  8:45               ` Pierre Habouzit
2008-07-29  8:21           ` Pierre Habouzit
2008-07-29  8:37             ` Pierre Habouzit
2008-07-29  8:51               ` Petr Baudis
2008-07-29 12:15                 ` Johannes Schindelin
2008-07-29 13:07                   ` Pierre Habouzit
2008-07-29 13:15                     ` Johannes Schindelin
2008-07-29 13:19                       ` Pierre Habouzit
2008-07-29 13:31                       ` Nigel Magnay
2008-07-29 14:49                         ` Pierre Habouzit
2008-07-29 14:53                         ` Junio C Hamano
  -- strict thread matches above, loose matches on Subject: below --
2009-10-17 17:15 Steven Noonan
2009-10-17 17:27 ` Jakub Narebski
2009-10-17 22:30   ` Nanako Shiraishi
2009-10-21 19:38 ` Avery Pennarun
2008-04-28 19:50 Victor Bogado da Silva Lins
2008-04-28 21:01 ` Miklos Vajna
     [not found] <s5hwspjzbt0.wl%tiwai@suse.de>
     [not found] ` <Pine.LNX.4.61.0802061437190.8113@tm8103.perex-int.cz>
     [not found]   ` <Pine.LNX.4.61.0802061505470.8113@tm8103.perex-int.cz>
     [not found]     ` <47AA1361.7070201@keyaccess.nl>
     [not found]       ` <s5h7ihhknez.wl%tiwai@suse.de>
2008-02-07 21:24         ` GIT submodules Rene Herman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=320075ff0807281323l51bb6478j30e3e4c490974a70@mail.gmail.com \
    --to=nigel.magnay@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=madcoder@debian.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).