Oh and Stefan

"Again, please verify that you're invoking the tool in the right way
before jumping to conclusions."

Jumping to conclusions is the only way I get exercise :) :)

On 9 December 2011 16:52, Rob Pointer <rpoin...@clearvision-cm.com> wrote:

> Stefan
> That's exactly what I was saying, that if any merging/copy has occurred
> from trunk to branch, then you need to use the reintegrate merge.  if you
> don't then that's when you get merge conflicts.
>
>
> On 9 December 2011 14:00, Stefan Sperling <s...@elego.de> wrote:
>
>> On Fri, Dec 09, 2011 at 01:05:02PM +0000, Rob Pointer wrote:
>> > Mark
>> > If you put changes multiple times from trunk to a branch (in development
>> > terms, a re-base) you can cause reflective merges and actually cause
>> more
>> > problems.  The recommended merge back into trunk is a reintegrate merge.
>> > I am not sure if this has been addressed in 1.7, but  certainly for
>> earlier
>> > versions (anyone please correct me if I am wrong here though :) ).
>> >
>> > The scenario goes
>> > 1) trunk contains file A
>> > 2) copy trunk to branch1
>> > 3) modify file A in branch1
>> > 4) add folderb/fileb in trunk
>> > 5) branch (copy) folderb into branch (or merge if it actually works :) )
>> > 6) do some changes to file A and ffileb
>> > 7) merge back into trunk.
>> >
>> > SVN seems to get confused and when it checks the history of both trunk
>> and
>> > branch1 it doesn't know that the folderb/fileb was added in branch1
>> using a
>> > copy, therefore it just thinks you added the files on trunk and then
>> > branch1 as two separate operations (for any clearcase users this is an
>> evil
>> > twin scenario).  Therefore SVN will create a tree conflict when merging
>> > your branch back into trunk.
>>
>> Wrong, wrong, wrong. You may believe that Subversion is broken but in
>> fact you're just pushing its buttons the wrong way.
>>
>> To be clear, if you use the correct merge syntax for each step your
>> scenario works just fine. And this applies to 1.6 as well as 1.7.
>>
>> To demonstrate:
>>
>> + rm -rf reflective-merge
>> + mkdir -p reflective-merge
>> + mkdir -p reflective-merge/trunk
>> + echo A
>> + > reflective-merge/trunk/A
>> + svnadmin create /tmp/reflective-merge/repos
>> + svn import reflective-merge/trunk
>> file:////tmp/reflective-merge/repos/trunk -m importing project tree
>> Adding         reflective-merge/trunk/A
>>
>> Committed revision 1.
>> + svn copy file:////tmp/reflective-merge/repos/trunk
>> file:////tmp/reflective-merge/repos/branch1 -m creating branch
>>
>> Committed revision 2.
>> + rm -rf reflective-merge/trunk
>> + svn checkout file:////tmp/reflective-merge/repos/trunk
>> reflective-merge/trunk
>> A    reflective-merge/trunk/A
>> Checked out revision 2.
>> + svn checkout file:////tmp/reflective-merge/repos/branch1
>> reflective-merge/branch1
>> A    reflective-merge/branch1/A
>> Checked out revision 2.
>> + echo foo
>> + >> reflective-merge/branch1/A
>> + svn commit -m modify A on branch reflective-merge/branch1
>> Sending        reflective-merge/branch1/A
>> Transmitting file data .
>> Committed revision 3.
>> + svn mkdir reflective-merge/trunk/folderb
>> A         reflective-merge/trunk/folderb
>> + echo bar
>> + >> reflective-merge/trunk/folderb/fileb
>> + svn commit -m add folderb/fileb on trunk reflective-merge/trunk
>> Adding         reflective-merge/trunk/folderb
>>
>> Committed revision 4.
>> + svn update reflective-merge/branch1
>> Updating 'reflective-merge/branch1':
>> At revision 4.
>> + svn merge file:////tmp/reflective-merge/repos/trunk
>> reflective-merge/branch1 --accept postpone
>> --- Merging r2 through r4 into 'reflective-merge/branch1':
>> A    reflective-merge/branch1/folderb
>> --- Recording mergeinfo for merge of r2 through r4 into
>> 'reflective-merge/branch1':
>>  U   reflective-merge/branch1
>> + svn commit reflective-merge/branch1 -m merge trunk into branch (no
>> conflicts)
>> Sending        reflective-merge/branch1
>> Adding         reflective-merge/branch1/folderb
>>
>> Committed revision 5.
>> + echo baz
>> + >> reflective-merge/branch1/folderb/fileb
>> + svn commit -m modify folderb/fileb on branch reflective-merge/branch1
>> + svn update reflective-merge/trunk
>> Updating 'reflective-merge/trunk':
>> At revision 5.
>> + svn merge --reintegrate file:////tmp/reflective-merge/repos/branch1
>> reflective-merge/trunk --accept postpone
>> --- Merging differences between repository URLs into
>> 'reflective-merge/trunk':
>> U    reflective-merge/trunk/A
>> --- Recording mergeinfo for merge between repository URLs into
>> 'reflective-merge/trunk':
>>  U   reflective-merge/trunk
>> + svn commit reflective-merge/trunk -m reintegrate branch into trunk (no
>> conflicts)
>> Sending        reflective-merge/trunk
>> Sending        reflective-merge/trunk/A
>> Transmitting file data .
>> Committed revision 6.
>>
>> You only get a tree-conflict if you forget to use --reintegrate in the
>> last
>> merge:
>>
>> + svn update reflective-merge/trunk
>> Updating 'reflective-merge/trunk':
>> At revision 5.
>> + svn merge file:////tmp/reflective-merge/repos/branch1
>> reflective-merge/trunk --accept postpone
>> --- Merging r2 through r5 into 'reflective-merge/trunk':
>> U    reflective-merge/trunk/A
>>   C reflective-merge/trunk/folderb
>> --- Recording mergeinfo for merge of r2 through r5 into
>> 'reflective-merge/trunk':
>>  U   reflective-merge/trunk
>> Summary of conflicts:
>>  Tree conflicts: 1
>> + svn commit reflective-merge/trunk -m reintegrate branch into trunk (no
>> conflicts)
>> subversion/svn/commit-cmd.c:183: (apr_err=155015)
>> subversion/libsvn_client/commit.c:853: (apr_err=155015)
>> subversion/libsvn_client/commit.c:853: (apr_err=155015)
>> svn: E155015: Commit failed (details follow):
>> subversion/libsvn_client/commit_util.c:1154: (apr_err=155015)
>> subversion/libsvn_client/commit_util.c:1154: (apr_err=155015)
>> subversion/libsvn_client/commit_util.c:823: (apr_err=155015)
>> subversion/libsvn_client/commit_util.c:329: (apr_err=155015)
>> svn: E155015: Aborting commit: '/tmp/reflective-merge/trunk/folderb'
>> remains in conflict
>>
>> To understand why you need the --reintegrate, see:
>>
>> http://mail-archives.apache.org/mod_mbox/subversion-dev/201107.mbox/%3c20110720124721.ga7...@ted.stsp.name%3E
>>
>> To understand how to repeatedly merge back and forth between the
>> trunk and the branch, see here:
>>
>> http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.reintegratetwice
>>
>> For some reason understanding the --reintegrate option seems to be
>> a major usability hurdle for many when it comes to understanding merging
>> in Subversion. It would be nice to just make the 'svn merge ^/foobar'
>> magically do whatever people expect. But I don't see a good way of doing
>> that, unfortunately.
>> Once you understand what a 2-URL merge is and how that works, and that
>> any merge is really just a 2-URL merge, it's really not that hard to
>> understand that --reintegrate is just syntactic sugar and when you
>> should use it.
>>
>> > A similar scenario occurs of you copied file A from trunk to branch1
>> after
>> > modifying it on trunk.  SVN will then throw content conflicts, telling
>> you
>> > that you modified the same line in the file  in two branches (i.e. trunk
>> > and branch1) and the text is identical.  Again not sure if 1.7 fixes
>> this,
>> > but it is definitely present in 1.6.x
>>
>> Again, please verify that you're invoking the tool in the right way
>> before jumping to conclusions.
>>
>> If you don't carefully use the right 'svn merge' invokation syntax
>> for the situation at hand you can easily create conflicts for yourself.
>> See also the output of 'svn help merge' in 1.7, copied here:
>> http://subversion.apache.org/docs/svn-merge.txt
>>
>
>
>
> --
> *Rob Pointer MSc*
> Software Specialist and Consultant
> rpoin...@clearvision-cm.com <mmusc...@clearvision-cm.com>
>
> *
> Tel: +44 (0) 845 459 9530
>  **
> **
>  <http://www.twitter.com/clearvisioncm> 
> <http://www.facebook.com/clearvisioncm>
>   <http://www.linkedin.com/company/clearvision> 
> <http://www.clearvision-cm.com/rss-feed/clearvision-news>
>   <http://www.clearvision-cm.com/>
> *
>
>
>


-- 
*Rob Pointer MSc*
Software Specialist and Consultant
rpoin...@clearvision-cm.com <mmusc...@clearvision-cm.com>

*
Tel: +44 (0) 845 459 9530
**
**
<http://www.twitter.com/clearvisioncm> <http://www.facebook.com/clearvisioncm>
  <http://www.linkedin.com/company/clearvision>
<http://www.clearvision-cm.com/rss-feed/clearvision-news>
  <http://www.clearvision-cm.com/>
*

Reply via email to