Re: submodule modify/delete wrong message
- From
David Turner <novalis@novalis.org>
- Date
- Dec 11, 2017, 20:35 UTC
- Message-ID
- <1513024524.10716.8.camel@novalis.org>
- In-Reply-To
- <CAGZ79kZVm7ZgnqBFnKd8L51Uy+5_7DOttUMAU=qofN3XXD94nQ@mail.gmail.com>
On Mon, 2017-12-11 at 12:27 -0800, Stefan Beller wrote:
Show 13 quoted lines
> On Mon, Dec 4, 2017 at 1:39 PM, David Turner <novalis@novalis.org> > wrote: > > When merging with a submodule modify/delete conflict (i.e. I've > > deleted > > the submodule, and I'm merging in a branch that modified it), git > > lies > > about what it is doing: > > > > "CONFLICT (modify/delete): submodule deleted in HEAD and modified > > in > > submodules. > > Up to here the error message sounds correct, still?
Yep!
Show 5 quoted lines
> > Version submodules of submodule left in tree at > > submodule~submodules. > > Automatic merge failed; fix conflicts and then commit the result." > > This sounds as if the code assumed to handle only files.
This assumption is unfortunately very common -- I just filed a PR to fix an instance of this in libgit2.
Show 19 quoted lines
> > In fact, the working tree does not contain anything named > > 'submodule~submodules'. > > > > In addition, I would ordinarily resolve a conflict like this by > > using > > 'git rm'. Here, this gives a warning: > > > > $ git rm submodule > > submodule: needs merge > > (Regarding submodule merges in general:) > > Uh. We cannot add merge markers to a submodule or such. > More importantly we'd have to ask the question if the merge conflict > is on the superproject level (Choose one of the commits of the > submodule) > or on the submodule level (perform a merge in the submodule between > the > two commits) or some hybrid approach thereof.
Yeah, that's a tricky thing in general. In this case, tho, the submodule is being removed, so git rm should work.
Show 5 quoted lines
> > rm 'submodule' > > warning: Could not find section in .gitmodules where path=submodule > > The deletion of the submodule removed the .gitmodules entry, and the > merge of the .gitmodules file presumably went fine. :/
Indeed.
Show 17 quoted lines
> I assume we need a special merge driver for the .gitmodules file to > keep > the submodule around when it is in at least one side. > > > Git's behavior here is significantly better than liggit2's (which > > tries > > to check out 'submodule' as if it were a blob, and fails to do so), > > but > > it's still confusing. > > > > It's not clear to me what the correct behavior is here. Maybe it's > > sufficient to just fix the message? > > I think the first step is to fix the message to reflect reality. > > As alluded to above, I don't know what the correct merge > behavior is (and where to put 'conflict markers').
The only case we need 'conflict markers' is in the {add,modify}/{add,modify} case (with different versions on each side). The delete/* and */delete case can be handled more simply. We might not want to do this until we can handle all cases -- but personally, I think a half-solution is better than a non-solution.