Intricacies of submodules [was: Migrating svn to git with heavy use of externals]
- From
- Roman Shaposhnik <rvs@sun.com>
- Date
- Apr 9, 2008, 19:57 UTC
- Message-ID
- <1207771054.13123.228.camel@work.sfbay.sun.com>
- In-Reply-To
- <32541b130804082334s604b62b0j82b510c331f48213@mail.gmail.com>
On Wed, 2008-04-09 at 02:34 -0400, Avery Pennarun wrote:
Show 14 quoted lines
> On Wed, Apr 9, 2008 at 12:39 AM, Roman Shaposhnik <rvs@sun.com> wrote: > > > In my own use case, I think having all the objects from the > > > supermodule *and* submodules all be in the same repo is what I want. > > > This kind of obviates the need for .gitmodules entirely, if > > > git-checkout and friends will do the right thing. I think I'll submit > > > some patches eventually once I have this figured out properly. > > > > Hm. But what about those who might want to pull from you? .git/config > > doesn't propagate, which means that they'll be kind of stuck, don't > > you think? > > Not exactly. The idea is that if the supermodule and submodules are > all lumped into a single repo (and your refs are set up correctly), > then cloning the supermodule will also clone all the submodules.
Interesting! How do you make it happen? Do you use git hooks or
something? On my end, I can't really reproduce that behavior of clone
but I would very much like to:
$ alias mkrepo="git init; touch file; git add file; git commit -mInit"
$ mkdir super ; cd super
$ mkrepo
$ mkdir submodule ; cd submodule
$ mkrepo
$ cd ..
$ git submodule add submodule
Adding existing repo at 'submodule' to the index
$ git commit -mSubmodule
Created commit 5921c87: Submodule
2 files changed, 4 insertions(+), 0 deletions(-)
create mode 100644 .gitmodules
create mode 160000 submoduleNow, when I clone super I don't actually have submodule cloned: $ git clone super super-clone $ cd super-clone $ git submodule status -7482d0433ed681aa243629f13cd97ca5be242393 submodule
In fact, it seems that I can't even do "submodule update", which
seems like a bug to me, by the way:
$ git submodule init
Submodule 'submodule' (submodule) registered for path 'submodule' $ git submodule update
Initialized empty Git repository in /tmp/TEST/super-clone/submodule/.git/
fatal: no matching remote head
fetch-pack from 'submodule' failed.
Clone of 'submodule' into submodule path 'submodule' failedAny ideas on what's going on here? Or what am I doing wrong?
> So everyone will have all the necessary refs anyway; as long as > git-checkout checks them out, .gitmodules shouldn't have to exist at > all, becaues there's nothing "special" for git-submodule to do.
I would very much like to have that, yes. Please do provide additional details on how's your setup is different from mine.
Thanks, Roman.