Subject: Re: RFC: Making submodules "track" branches

From: Marc Branchaud <[email-masked]>
Date: Wed, 09 Jun 2010 11:36:47 -0400

On 10-06-09 03:15 AM, Jens Lehmann wrote:
> Am 09.06.2010 01:09, schrieb Junio C Hamano:
>> Jens Lehmann <[email-masked]> writes:
>>
>>> Don't record a commit in the first place, following a branch is not bound
>>> to a special commit, so pretending to do that might do more harm than good.
>>> Just putting the 0-hash there might be the solution.
>>
>> Ugh.  Even though I understand that in some scenarios you would want to
>> say "I don't care what commit is used for this submodule---just use the
>> tip of the branch 'fred'", I don't think you want to use 0{40} in the
>> superproject.  I think it would be Ok to add such a note to .gitmodules in
>> the superproject, but I also think we should still record which _exact_
>> commit was used to test and validate such a commit in the superproject
>> when it was made.
> 
> I think we are in violent agreement here.

I too am in this camp.

If a submodule is tracking the tip of a branch, I think it's vital that
checking out the superproject's HEAD@{3 months ago} gives you the submodule
as it was in the superproject 3 months ago.  Back then, it may have been
tracking a different branch.  It may not have been tracking a branch at all.
 It may have been using a completely different repository altogether.

It's hard for me to see the utility of having the submodule reflect the
tip-of-some-branch-as-of-today when I'm looking at 3-month-old code in the
superproject.

AFAICT, Ævar's original proposal does the right thing here, because a
submodule tracking a branch would look dirty in the superproject if the
branch's HEAD doesn't match the commit ID recorded in the superproject.  So
"submodule update" would restore the submodule's state to what the
superproject says it should be.

I don't think I mind dirty branch-tracking submodules, but folks seem to find
it distasteful.  However, I believe all the proposals made so far to address
it break what I call the superproject's "historical consistency."

I wish I could come up with some way to reconcile clean branch-tracking
submodules with historical consistency, but alas my imagination is so far too
limited.  :(

		M.