On Tue, May 26, 2015 at 3:07 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> Robert Haas <robertmh...@gmail.com> writes:
>> Realistically, with merge.conflictstyle = diff3 (why is this not the
>> default?), resolving whitespace conflicts that occur when you try to
>> cherry-pick is typically not very difficult.
>
> Really?  The problems I have generally come from places where pgindent
> has changed the line breaks, not just horizontal spacing.  I haven't
> seen anything that copes with this, certainly not git.

Well, it's not fully automated, but if you set the setting above, and
then cherry-pick, your merge conflicts will look something like this:

<<<<<<<
side A
|||||||
original version
=======
side B
>>>>>>>

Either side A or side B will be what changed in the patch you
cherry-picked, and the other will be what changed in the branch in the
meantime.  I forget which is which.  So you notice that one of the two
sides differs from the original version only in terms of whitespace
and delete that side, keeping the other side.  Done.

In general, the way you resolve these conflicts is by choosing the
side that has fewer changes from the original version, noting how it
differs from the original version, modifying the other side
accordingly, and then deleting the other two versions.  For example:

<<<<<<<
here we renamed the function!
|||||||
original version
=======
here we added an additional parameter to the function call!
>>>>>>>

So you either change side B to the new function name and remove side
A, or else you change side A to pass the extra parameter and remove
side B.  In either case you remove the original version.

This is obviously not zero effort.  At the same time, it's not much
effort, either.  I resolve these kinds of mechanical conflicts all the
time, and they don't take up much time or effort.  If you have to deal
with this kind of crap using "patch", it bites.  If you use git but
with the default conflictstyle, you don't get the "original version"
part of the conflict, so it still bites.  But after a modest amount of
practice, resolving trivial conflicts with merge.conflictstyle=diff3
is pretty darn easy.  Or at least, I have found it so.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to