From: Jens Lehmann <Jens.Lehmann@web.de>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Git Mailing List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
"Shawn O. Pearce" <spearce@spearce.org>,
Paul Mackerras <paulus@samba.org>,
Heiko Voigt <hvoigt@hvoigt.net>, Lars Hjemli <hjemli@gmail.com>,
Avery Pennarun <apenwarr@gmail.com>
Subject: Re: submodules' shortcomings, was Re: RFC: display dirty submodule working directory in git gui and gitk
Date: Tue, 05 Jan 2010 09:11:17 +0100 [thread overview]
Message-ID: <4B42F425.4010901@web.de> (raw)
In-Reply-To: <alpine.DEB.1.00.1001042217370.4985@pacific.mpi-cbg.de>
Am 04.01.2010 23:29, schrieb Johannes Schindelin:
> You do remember the discussion at the Alles wird Git about the need for
> Subversion external-like behavior, right?
Yup. But never having used svn, let alone externals, i think i just
did not get it then ;-)
> - submodules were designed with a strong emphasis on not being forced to
> check them out. But Git makes it very unconvenient to actually check
> submodules out, let alone check them out at clone-time. And it is
> outright impossible to _enforce_ a submodule to be checked out.
Absolutely. But i think the group mappings discussed by Junio and Heiko
are a good starting point to solve that problem:
http://thread.gmane.org/gmane.comp.version-control.git/130928/
This should be solvable by putting the necessary information into
.gitmodules and have git clone use it.
> - among other use cases, submodules are recommended for sharing content
> between two different repositories. But it is part of the design that it
> is _very_ easy to forget to commit, or push the changes in the submodule
> that are required for the integrity of the superproject.
Definitely (and if i got that right, svn externals have the same problem).
What about checking for every submodule before a push in the superproject
that its HEAD is on a remote branch? I don't think we can provide full
safety here, but we could handle the 99% case of a forgotten push in the
submodule. This could even be done with a rather simple hook (if we had a
pre-push hook that is :-).
> - that use case -- sharing content between different repositories -- is
> not really supported by submodules, but rather an afterthought. This is
> all too obvious when you look at the restriction that the shared content
> must be in a single subdirectory.
I don't see that as a problem (and it's the same with svn externals, no?).
And having worked for a long time with a RCS variant which allowed
"projects" to contain an arbitrary list of files, i don't think this is
a problem (but forgetting to add new files to this list really is, so
putting everything in one directory is *much* safer IMHO).
And: almost all files were properly grouped in directories after a decade
of development even though that was not enforced by the scm at all.
> - related are the use cases where it is desired not to have a fixed
> submodule tip committed to the superproject, but always to update to the
> current, say, master (like Subversion's externals). This use case has
> been wished away by the people who implemented submodules in Git. But
> reality has this nasty habit of ignoring your wishes, does it not?
Having read up about svn externals in the meantime, what about something
like this:
- Add a command like "git submodule forward" (as update is already in
use) that takes an optional -b <branchname>. It does a fetch in the
submodule, then tries to fast forward (or rebase) to master or the
branch given and stages this commit in the superproject. This should
be the equivalent to doing an "svn update" in a repo with externals.
Or am i missing something?
(And we could avoid the detached HEAD in the fast forward case by
really checking out the branch in the submodule)
- We could also add an option to "git submodule add" to specify the
default branch name for forward.
> - while it might be called clever that the submodules' metadata are stored
> in .gitmodules in the superproject (and are therefore naturally tracked
> with Git), the synchronization with .git/config is performed exactly
> once -- when you initialize the submodule. You are likely to miss out
> on _every_ change you pulled into the superproject.
Yes. This synchronization could be either obsoleted by only using
.gitmodules or automated.
> Besides, as long as there is enough reason to have out-of-Git alternative
> solutions such as repo, submodules deserve to be 2nd-class citizens.
I think in the long run to make submodules first class citizens the
following submodule commands must be obsoleted by their regular git
parts: init (by git clone), status (by git status), update (by git
checkout), summary (already in git diff thanks to your patch) and sync
(maybe Avery's idea of only relying on .gitmodules and not copying data
int .git/config would solve this).
That would leave git submodule add, foreach and maybe a command to do
what svn update does for externals and another to manipulate things like
group membership etc..
Which reminds me of Sverre's quote from Alles Wird Git:
"Yes, it is possible. But it will be hard."
next prev parent reply other threads:[~2010-01-05 8:12 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-02 15:33 RFC: display dirty submodule working directory in git gui and gitk Jens Lehmann
2010-01-04 9:44 ` Johannes Schindelin
2010-01-04 10:44 ` Heiko Voigt
2010-01-04 11:46 ` submodules, was " Johannes Schindelin
2010-01-04 18:29 ` Avery Pennarun
2010-01-04 19:14 ` Jens Lehmann
2010-01-04 17:04 ` Jens Lehmann
2010-01-04 22:29 ` submodules' shortcomings, was " Johannes Schindelin
2010-01-04 22:27 ` Shawn O. Pearce
2010-01-04 22:35 ` Avery Pennarun
2010-01-04 22:53 ` Avery Pennarun
2010-01-05 8:11 ` Jens Lehmann [this message]
2010-01-05 9:33 ` Junio C Hamano
2010-01-05 10:07 ` Johannes Schindelin
2010-01-05 11:57 ` Jens Lehmann
2010-01-05 18:31 ` Junio C Hamano
2010-01-05 20:01 ` Jens Lehmann
2010-01-06 1:04 ` Junio C Hamano
2010-01-06 14:05 ` Jens Lehmann
2010-01-06 17:01 ` Junio C Hamano
2010-01-06 17:23 ` Nguyen Thai Ngoc Duy
2010-01-06 17:55 ` Junio C Hamano
2010-01-06 18:22 ` Nguyen Thai Ngoc Duy
2010-01-06 18:32 ` Jens Lehmann
2010-01-06 20:01 ` Junio C Hamano
2010-01-06 21:19 ` Jens Lehmann
2010-01-06 18:20 ` Jens Lehmann
2010-01-05 23:02 ` Johannes Schindelin
2010-01-05 9:46 ` Johannes Schindelin
2010-01-05 12:19 ` Jens Lehmann
2010-01-05 14:27 ` Heiko Voigt
2010-01-05 15:07 ` Johan Herland
2010-01-05 15:30 ` Johannes Schindelin
2010-01-05 22:37 ` Nanako Shiraishi
2010-01-05 23:13 ` Johannes Schindelin
2010-01-07 11:04 ` Nanako Shiraishi
2010-01-05 20:38 ` Pau Garcia i Quiles
2010-01-05 23:06 ` cmake, was Re: submodules' shortcomings Johannes Schindelin
2010-01-06 1:17 ` Pau Garcia i Quiles
2010-01-06 4:25 ` Miles Bader
2010-01-06 9:24 ` Johannes Schindelin
2010-01-04 17:51 ` RFC: display dirty submodule working directory in git gui and gitk Nguyen Thai Ngoc Duy
2010-01-04 18:40 ` Jens Lehmann
2010-01-04 19:05 ` Junio C Hamano
2010-01-04 19:21 ` Jens Lehmann
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=4B42F425.4010901@web.de \
--to=jens.lehmann@web.de \
--cc=Johannes.Schindelin@gmx.de \
--cc=apenwarr@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hjemli@gmail.com \
--cc=hvoigt@hvoigt.net \
--cc=paulus@samba.org \
--cc=spearce@spearce.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).