On 05/08, Randall S. Becker wrote:
> On May 8, 2017 12:55 PM, Stefan Beller wrote:
> >On Mon, May 8, 2017 at 9:46 AM, Randall S. Becker <rsbec...@nexbridge.com> 
> >wrote:
> >> On May 8, 2017 12:25 PM, Stefan Beller wrote:
> >>>On Mon, May 8, 2017 at 7:42 AM, Randall S. Becker <rsbec...@nexbridge.com> 
> >>>wrote:
> >>>> On May 6, 2017 4:38 AM Ciro Santilli wrote:
> >>>>> This is a must if you are working with submodules, otherwise every 
> >>>>> git checkout requires a git submodule update, and you forget it, 
> >>>>> and things break, and you understand, and you go to stack overflow 
> >>>>> questions 
> >>>>> http://stackoverflow.com/questions/22328053/why-doesnt-git-checkout
> >>>>> -a utomatically-do-git-submodule-update-recursive
> >>>>> http://stackoverflow.com/questions/4611512/is-there-a-way-to-make-g
> >>>>> it -pull-automatically-update-submodules
> >>>>> and you give up and create aliases :-)
> >>
> >>> The upcoming release (2.13) will have "git checkout 
> >>> --recurse-submodules", which will checkout the submodules at the commit 
> >>> as recorded in the superproject.
> >>> I plan to add an option "submodule.recurse" (name is subject to 
> >>> bikeshedding), which would make the --recurse-submodules flag given 
> >>> by default for all commands that support the flag. (Currently cooking we 
> >>> have reset --recurse-submodules, already existing there is push/pull).
> >>
> >> Brilliant! 😊
> >>
> >>>> I rather like the concept of supporting --recurse-submodules. The 
> >>>> complexity is that the branches in all submodules all have to have 
> >>>> compatible >>>semantics when doing the checkout, which is by no means 
> >>>> guaranteed. In the scenario where you are including a submodule from a 
> >>>> third-party (very >>>common - see gnulib), the branches likely won't be 
> >>>> there, so you have a high probability of having the command fail or 
> >>>> produce the same results as >>>currently exists if you allow the 
> >>>> checkout even with problems (another option?). If you have control of 
> >>>> everything, then this makes sense.
> >>
> >>>I am trying to give the use case of having control over everything (or 
> >>>rather mixed) more thought as well, e.g. "checkout --recurse-submodules -b 
> >>>>><name>" may want to create the branches in a subset of submodules as 
> >>>well.
> >>
> >> I have to admit that I just assumed it would have to work that way 
> >> this would not be particularly useful. However, in thinking about it, 
> >> we might want to limit the depth of how far -b <name> takes effect. If 
> >> the super module brings in submodules entirely within control of the 
> >> development group, having -b <name> apply down to leaf submodules 
> >> makes sense (in some policies). However, if some submodules span out 
> >> to, say, gnulib, that might not make particular sense. Some downward 
> >> limit might be appropriate. Perhaps, in the submodule ref, you might 
> >> want to qualify it as <commit>:<ref> (but the impact of that is 
> >> probably and admittedly pretty horrid). I hesitate to suggest a 
> >> numeric limit, as that assumes that submodules are organized in a 
> >> balanced tree - which is axiomatically unreasonable. Maybe something 
> >> in .git/config, like
> >>
> >> [branch "topic*"]
> >>         submodules=a,b,c
> >>
> >> But I suspect that would make things even more confusing.
> 
> >I thought about having yet-another-flag in the .gitmodules file, which 
> >states if the submodule is extern or internal.
> 
> >[submodule "gnulib"]
> >    path=./gnulib
> >    external = true # implies no branch for checkout -b --recurse-submodules
> 
> >I think there are a couple more situations where such "external" submodules 
> >are treated differently, so maybe we'd want to think carefully about the 
> >>actual name as different workflows would want to have different features 
> >for an internal/external submodule.
> 
> I didn't want to open up that one, but yes. That makes sense. However, I 
> don't like overloading what "external" means or might mean in the future. 
> Would you consider a distinct Boolean for that, like inherit-branch=true?

Something like that kind of already exists.  The 'branch' field.
Internal repos would most likely use the '.' value to indicate that the
submodules should track the superproject's branch.  While a value of say
'foo' would indicate that the submodule should always be on branch
'foo'; this could be used for external repositories.

> 
> Cheers,
> Randall
> 

-- 
Brandon Williams

Reply via email to