git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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.

Previous: Stefan Beller
Message 3 of 3 in “submodule modify/delete wrong message”
  1. David TurnerDec 4, 2017
  2. Stefan BellerDec 11, 2017
  3. David TurnerDec 11, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.