From: Junio C Hamano <gitster@pobox.com>
To: Voltage Spike <voltspike@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Merge-Recursive Improvements
Date: Tue, 12 Feb 2008 15:11:19 -0800 [thread overview]
Message-ID: <7vodal22js.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <A21B3CA8-6240-434F-87A9-C6F76DA15265@gmail.com> (Voltage Spike's message of "Tue, 12 Feb 2008 15:16:33 -0700")
Voltage Spike <voltspike@gmail.com> writes:
> I would like to make a series of significant improvements to the
> merge-recursive mechanism in git, but I was hoping to solicit some early
> feedback before submitting patches.
>
> First, git is overly zealous at merging differences and two functions
> added
> at the same point in a file become intertwined during the merge. A
> trivial
> example of this behavior:
>
> <<<<<<< HEAD:file.txt
> void newfunc1()
> =======
> void newfunc2()
> >>>>>>> merge:file.txt
> {
> int err;
> <<<<<<< HEAD:file.txt
> err = doSomething();
> =======
> err = doSomethingElse();
> >>>>>>> merge:file.txt
This lacks illustration of what you change that example to, which
makes the proposal harder to judge.
I suspect you are saying that you would want to coalesce
adjacent hunks that have too small number of lines between '>>>'
of the previous hunk and '<<<' of the current hunk by duplicate
the common hunks, like this:
<<<<<<< HEAD:file.txt
void newfunc1()
{
int err;
err = doSomething();
=======
void newfunc2()
{
int err;
err = doSomethingElse();
>>>>>>> merge:file.txt
(here, two lines that are "{" and "int err;" are taken as "too small").
I think it makes sense.
> Second, git doesn't tell me the original code inside the conflict
>
> >>>>>>> merge-base:file.txt
> Original code.
> ======= HEAD:file.txt
> Head code.
> ======= merge:file.txt
> Merged code.
> <<<<<<<
This is a much harder sell, as external tool like git-mergetool
that inspect the result depend on the current output.
And it is not as useful as an alternative.
In case you did not know, you can get a much better picture by:
$ git log --left-right -p --merge
because you would then see not just the merge base version but
the changes _and the reasons for the changes_ in between.
> Third, git doesn't appear to have any sense of context when performing a
> merge. Another contrived example which wouldn't be flagged as a merge
> conflict:
>
> ptr = malloc(len); // Added in HEAD.
> init(); // Included in merge-base.
> ptr = malloc(len); // Added in "merge".
Are you saying it a problem to report or not to report? In
either case, I decline to comment on this one, as I do not have
a strong opinion either way.
> Fourth, git doesn't provide a mechanism for merges to ignore whitespace
> changes.
That would be a good change.
I can immediately say that 1 and 4 are worthwhile things to do,
as long as they are contained to xdl_merge(). It would help
other users of the merge logic.
I've started working on rewriting revert to directly use
xdl_merge(), bypassing major parts of merge-recursive, and I
imagine such a change you propose would be useful without
affecting the callers.
next prev parent reply other threads:[~2008-02-12 23:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-12 22:16 Merge-Recursive Improvements Voltage Spike
2008-02-12 23:03 ` Stefan Monnier
2008-02-12 23:11 ` Junio C Hamano [this message]
2008-02-12 23:48 ` Linus Torvalds
2008-02-13 0:05 ` Johannes Schindelin
2008-02-13 1:10 ` [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM Johannes Schindelin
2008-02-13 1:34 ` Junio C Hamano
2008-02-13 11:16 ` Johannes Schindelin
2008-02-15 17:32 ` Junio C Hamano
2008-02-15 18:17 ` Linus Torvalds
2008-02-15 18:23 ` Johannes Schindelin
2008-02-17 19:06 ` Johannes Schindelin
2008-02-17 19:07 ` [PATCH 1/2] xdl_merge(): make XDL_MERGE_ZEALOUS output simpler Johannes Schindelin
2008-02-17 19:07 ` [PATCH(RFC) 2/2] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM Johannes Schindelin
2008-02-18 8:35 ` [PATCH 1/2] xdl_merge(): make XDL_MERGE_ZEALOUS output simpler Junio C Hamano
2008-02-18 11:33 ` Johannes Schindelin
2008-02-13 2:06 ` [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM Linus Torvalds
2008-02-13 11:22 ` Johannes Schindelin
2008-02-13 7:39 ` Merge-Recursive Improvements Johannes Sixt
2008-02-13 8:17 ` Steffen Prohaska
2008-02-13 8:21 ` Voltage Spike
2008-02-13 8:46 ` Johannes Sixt
2008-02-15 19:21 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vodal22js.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=voltspike@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).