[cvsnt] Mergepoint issues on 2.5.0.3 b2382

Gerhard Fiedler lists at connectionbrazil.com
Mon Jan 15 11:45:42 GMT 2007


Andreas Krey wrote:

   1.1---------+
    |          |
    |       1.1.2.1
    |          |
   1.2      1.1.2.2
    |          |
    +-----> 1.1.2.3  Get more features into branch
    |          |
   1.3      1.1.2.4  Branch and head evolve further
    |          |
   1.4 <-------+     Merge back into head, using patch
    |          |
   1.5      1.1.2.5  Branch and head evolve further
    |          |
    +-----> 1.1.2.6  Get more features into branch - see below


>> For further development on the branch, you need to get the 1.3
>> functionality on the branch.
> 
> But not necessarily immediately.

I meant it was needed. Not for the merge process's sake, but because the
functionality was needed.

>> So, after the merge that created 1.4 (and maybe after some additional
>> work on both trunk and branch), you run again a merge from trunk to
>> branch. How does this work? Looks messy to me.
> 
> Not really. If you directly merge back into the branch from 1.4 (and
> nothing has been done on the branch since) it actually degenerates
> into a copy. Otherwise 1.1.2.4 is now the effective common ancestor,
> and merges only deal with what has changed in 1.4 on the head (a lot
> and potentially messy stuff from the backmerge) and what changed on
> the branch since 1.1.2.4 (probably very little).

Let's say there were changes in both branches (.5 in the diagram above).

> If 'messy' meant the common ancestor selection: That now is 1.1.2.4
> (as by the diagram above), independent of the direction of the
> next merge.

How does this "grab" the changes that happened between 1.2 and 1.3 when you
merge into the branch and create 1.1.2.6?


> Yes, but you can't properly merge that work into the trunk any more. Nor
> can you merge new trunk stuff into the branch. The situation is:
> 
>   (1.3)
>     +-----> 1.1.2.5  Get more features into branch
>     |          |
>    1.4 <=======X     Do copy outside cvsnt.
>     |
> 
> In 1.4 the head contains everything from the branch so far, but the
> merge arrows don't record that fact.
> 
> If you do a new merge from head to branch, regular cvsnt will merge
> the changes from 1.3 to 1.4 into the branch, although that is exactly
> the work that already has been done in the branch. 

You are correct, I missed this.


>>> And the copy-back is an operation that cvsnt does not provide and has to
>>> be done manually. 
>> 
>> I don't think this is correct. If you mean by "done manually" that one has
>> to use a command line command, you are correct. You could use a cvs update
>> command on the trunk to merge in the complete branch, from (branch) start
>> to (branch) tip. (After the 1.1.2.5. merge, of course.) Something like
>> 
>>   cvs up -j tagBranchStart -j branch 
> 
> No. After the merge to 1.1.2.5 there is no need for a merge, the branch
> is in exactly the state you want the head to have (you already merged
> the head with the branch). 

Yes, you are right again... :)  I actually never did it that way, I always
used a three-step approach (copy branch to trunk, add files that are new on
trunk, remove files on trunk that are not on the branch). This merge
command is what Tony H suggested, in that earlier thread, and I thought I
understood it. 


I wish Tony H or Arthur would explain better the situation(s) they have
seen that lead to data loss. IIRC, so far it was only a "trust me on that"
or something the like...  I think it would be extremely helpful if the
situations that lead to data loss were described somewhere in a way that
allows them to be reproduced. 

Gerhard


More information about the cvsnt mailing list