[Svnmerge] overzealous exclusion of reflective merges?

Reid Priedhorsky reid at reidster.net
Fri Jun 6 15:31:59 PDT 2008


Dustin J. Mitchell wrote:
> On Fri, Jun 6, 2008 at 4:47 PM, Reid Priedhorsky <reid at umn.edu> wrote:
>> 1. create branch A by copying TRUNK
>> 2. make some changes on A and commit them
>> 3. make some changes on TRUNK and commit them
>> 4. merge these changes on A back to TRUNK:
>>    a. svnmerge merge
>>    b. some edits -- fix conflicts, maybe some other changes
>>    c. commit
>> 5. make some more commits on TRUNK and commit them
>> 6. merge TRUNK to A
>>
>> But then A is missing some changes made on the trunk.
>>
>> I _think_ the changes that are being missed are those that occurred in
>> Step 4b. I hypothesize that svnmerge assumes in Step 6 that Commit 4c is
>> reflective and omits it -- but it shouldn't be, since what I committed
>> was not exactly what was merged. I could push the "other" changes to a
>> second commit, but I have to fix the conflicts before Subversion will
>> let me commit (and it seems reasonable that these conflict repairs would
>> be useful on Branch A too).
> 
> You're exactly right, though.  A commit is the finest-grain change
> that svnmerge can reason about.  How would it be able to differentiate
> the (conflicted) merged changes from the unique changes made in trunk?
>  Even if it could, how would it apply those changes to the branch
> (since they would doubtless cause conflicts there, too)?  This is a
> problem for any VC that's supporting multiple parallel lines of
> development.  There's no solution, really -- although some VC's do a
> better job than others.
> 
> When you merge the changes from step 3 to the branch, you should see
> the "mirror image" of the conflicts you resolved in step 4b.  Ideally
> you'd resolve the conflicts just as you did in 4b, leaving branch and
> trunk identical.

I have to manually fix the same conflicts twice? That doesn't seem 
right. (Especially since the A -> trunk and trunk -> A merges are done 
by different people.)

The thing is, I am pretty sure this used to work: we just left off the 
-b flag. But now svnmerge has gotten "smarter" about reflective merges 
and it's impossible to not specify -b any more. Is there a 
--no-bidirectional or something?

Thanks,

Reid




More information about the Svnmerge mailing list