[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

interactive conflict resolution a la SVK

From: David Glasser <glasser_at_mit.edu>
Date: 2007-07-05 06:29:40 CEST

Ben asked me about SVK's interactive conflict resolver, since he's
working on similar support for Subversion itself. CL, please jump in
and correct any lies I may be about to make :-)

SVK's interactive resolver comes into play whenever a conflict can
occur. The main sort of conflict I'm thinking of here is textual
conflicts; there's a special (less sophisticated) support for prop
conflicts, and I'm not sure right now what the deal is for "tree
conflicts" (CL?) These textual conflicts can occur during "svk
update" or during any merge command.

For each conflicting file, SVK asks:

Conflict found in FILE:
e)dit, d)iff, m)erge, s)kip, t)heirs, y)ours, h)elp?

"e" opens the file in your editor complete with <<< >>> marks and
allows the user to fix the conflict by hand.

"d" displays a diff between the working copy and the merged copy
(which at least on the first time that this question is released is
the copy with conflicts, so the diff looks kind of weird). Selecting
(h)elp reveals that you can also type "dy", "dt", or "dm" to diff the
local ("yours"), incoming ("theirs"), or merged version respectively
against the base.

"m" allows the user to resolve the conflict using any of a variety of
3rd-party merge tools: AraxisMerge, Emacs ediff, OSX FileMerge, GVim,
GtkDiff, Guiffy, Kdiff3, Meld, P4WinMerge, TkDiff, TortoiseMerge, vim
-d, or XXDiff. These merge tools receive the three or four relevant
files instead of just the <<< conflicted >>> one.

When you select "m", SVK autodetects which tools you have installed;
if there is more than one, it asks you which one you want to use. You
can set your default tool with the $SVKMERGE environment variable.
(If $SVKMERGE is set, then "m" is the default choice at the main menu;
otherwise "e" is.)

After each execution of "e" or "m", svk checks to see if you've
managed to rid the file of its conflict markers. If not, it presents
you with the same menu again. If you have, it gives you the same menu
with an additional "accept" option (which is the default choice);
accepting lets you move on with the merge. (The repeated nature of
the menu is why the "d" option can make sense.)

You can also select "t" or "y" to choose the incoming or local file
respectively. I think that there have been reports of the "theirs"
and "yours" names being confusing for users (though "local" and "base"
etc have their own issues): they make sense for update, but when
merging between branches in various directions they don't always mean
what they sound like. (I forget the details of the confusion here.)

Finally, you can select "skip" to skip over the file. I'm not quite
sure what this means... I think it leaves it conflicted and marks this
in the working copy metadata? I always resolve my conflicts, so I'm
not sure.

You can also set the $SVKRESOLVE environment value to a value (like
"s" or "t", say) to make that the default response to all of these
menus.

I hope this is helpful and at least mostly true!

--dave

-- 
David Glasser | glasser_at_mit.edu | http://www.davidglasser.net/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Jul 5 06:29:39 2007

This is an archived mail posted to the Subversion Dev mailing list.