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

Re: git-core: conflictstyle=diff3 doesn't actually use diff3 compatible format

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Mar 8, 2010, 04:54 UTC
Message-ID
<20100308045454.GA22672@progeny.tock>
In-Reply-To
<7vpr3itn89.fsf@alter.siamese.dyndns.org>
Junio C Hamano wrote:
> Jonathan Nieder <jrnieder@gmail.com> writes:
Show 9 quoted lines
>> I’d be interested to hear from xdiff people
>> whether it should be easy to add the ancestor name to the output.
>
> I don't think there was any xdiff people involved in this area.
> 
> I suspect that our tools actually rely on the common ancestor markers not
> having any extra cruft after them, so it would be introducing a bug if you
> change this output without changing the places that read them (I know
> about "rerere", but there may be others).
I guess the relevant xdiff person was you. ;-)

Thank you for the quick response. On the xdiff level, it looks like all that is needed is to pass the ancestor label as a member of struct s_xmparam, and then fill_conflict_hunk() could respect that. Not complicated at all.

For merge_trees() users, the ancestor label could be passed with branch1 and branch2 in struct merge_options.

That leaves the question of merge_recursive(). With merge_recursive(), there is more than one ancestor, so it is not completely clear what the diff3 merge should do. Currently it writes something like this:

 <<<<<<< HEAD
 Conflict resolution is hard;
 let's go shopping.
 |||||||
 <<<<<<< Temporary merge branch 1
 Who knows whose this is?
 |||||||
 Ancient history.
 =======
 Another intermediate result.
 >>>>>>> Temporary merge branch 2
 =======
 Git makes conflict resolution easy.
 >>>>>>> topic

which is hard to read [1]. Probably it would be better to use a consolidated common ancestor, by cocatenating the internal common ancestors; in this simple case, that would look like this:

 <<<<<<< HEAD
 Conflict resolution is hard;
 let's go shopping.
 ||||||||
 Ancient history.
 ========
 Git makes conflict resolution easy.
 >>>>>>>> topic
What should be the label of this possibly fictional merge base?
Jonathan
[1] For people and for rerere.  See http://bugs.debian.org/569645
Previous: Junio C HamanoNext: Jonathan Nieder
Message 5 of 23 in “Re: git-core: conflictstyle=diff3 doesn't actually use diff3 compatible format”
  1. Jonathan NiederMar 5, 2010
  2. Junio C HamanoMar 5, 2010
  3. Bert WesargMar 6, 2010
  4. Junio C HamanoMar 6, 2010
  5. Jonathan NiederMar 8, 2010
  6. 0/10 Add label for common ancestor to conflictstyle=diff3Jonathan Nieder, Mar 15, 2010
  7. 01/10 xdl_merge(): add optional ancestor label to diff3-style outputJonathan Nieder, Mar 15, 2010
  8. Junio C HamanoMar 15, 2010
  9. Jonathan NiederMar 15, 2010
  10. Junio C HamanoMar 15, 2010
  11. 02/10 merge-file --diff3: add a label for ancestorJonathan Nieder, Mar 15, 2010
  12. 03/10 ll_merge(): add ancestor label parameter for diff3-style outputJonathan Nieder, Mar 15, 2010
  13. 04/10 checkout --conflict=diff3: add a label for ancestorJonathan Nieder, Mar 15, 2010
  14. Junio C HamanoMar 15, 2010
  15. Jonathan NiederMar 15, 2010
  16. 05/10 merge_file(): add comment explaining behavior wrt conflict styleJonathan Nieder, Mar 15, 2010
  17. 06/10 merge_trees(): add ancestor label parameter for diff3-style outputJonathan Nieder, Mar 15, 2010
  18. 07/10 tests: document format of conflicts from checkout -mJonathan Nieder, Mar 15, 2010
  19. 08/10 checkout -m --conflict=diff3: add a label for ancestorJonathan Nieder, Mar 15, 2010
  20. 09/10 cherry-pick: add a label for ancestorJonathan Nieder, Mar 15, 2010
  21. 10/10 merge-recursive: add a label for ancestorJonathan Nieder, Mar 15, 2010
  22. Junio C HamanoMar 15, 2010
  23. Stefan MonnierMar 15, 2010

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.