That does clarify things.  I would suggest something in the docs (tool help as 
well as the redbook), since the redbook uses both with no reason for either.

My coworker, read somewhere it was "cherry picking", I have always used -r when 
I need to do it, and yes -r 99:100 is "harder" than -c 100..

But we were getting some conflicts, and I wasn't sure of the cause.. when 
speaking with the coworker as to how he was merging, this came up.

Thanks for the detailed explanation.

Scott
-----Original Message-----
From: Stefan Sperling [mailto:s...@apache.org] 
Sent: Friday, September 29, 2017 08:57
To: Scott Bloom <sc...@towel42.com>
Cc: Subversion <users@subversion.apache.org>
Subject: Re: Difference between merge -c and merge -r

On Fri, Sep 29, 2017 at 03:36:27PM +0000, Scott Bloom wrote:
> After reading the docs, I cant for the life of me, figure out what the 
> difference is.  Any pointer where I can learn what the difference in the two 
> merge techniques is?
> 
> Scott

Hi Scott,

The -c option is just syntactic sugar.

Before it was invented, merging a single revision, say r100, was always done 
like this: svn merge -r99:100 This asks svn to merge the difference between r99 
and r100, i.e.
the changeset committed in r100.

With -c, we can write this in a shorter way: svn merge -c100 This is equivalent 
to svn merge -r99:100

The -r option also supports "reverse" merges, where the differences of the 
original changeset are reversed: svn merge -r100:99 effectively backs out 
changes from r100. To achieve this effect with -c, prepend a minus sign to the 
number: svn merge -c-100

To make copy-pasting revision numbers from the output of 'svn log' easier the 
-c option also accepts numbers with 'r' prepended:
  svn merge -cr100
is the same as
  svn merge -c100
and
  svn merge -c-r100
is the same as
  svn merge -c-100

To an untrained eye the -c-r100 case might look as if the -r option was used, 
but that is not the case. It's the -c option with a minus for a reverse-merge 
and an 'r' prepended to the revision number.

The -c option also accepts multiple revision numbers separated by commas:
  svn merge -c100,102,105,200
This merges changes from all the listed revisions in the given order.
The -r option can be specified multiple times for the same effect but this is 
much more verbose: svn merge -r99:100 -r101:102 -r104:105 -r199:200

I hope this clarifies the situation :)

Reply via email to