[cvsnt] Yet another obscure merge problem

Tony Hoyle tmh at nodomain.org
Tue Feb 24 13:47:25 GMT 2004


On Tue, 24 Feb 2004 12:54:49 -0000, "Harrison, Andrew"
<andy.harrison at anite.com> wrote:


>Hmm, "keeping an eye on what your merging" is a bit of a problem. I'm trying
>to convince my manager that we should migrate to CVS from VSS using the
>argument that it does all the branching & merging automatically. 

You should always keep an eye on merging anyway...  CVS knows nothing
of code structure so it's possible that the merge will create
something unintended - 99% of the time it's OK but I always make sure
that the result compiles and passes various tests first.

>Is there a difference between and implicit and an explicit deleted file?

No... there's just the 'dead' state.  In theory you could do
mergepoint processing on it, but it'd require a fair bit of hacking of
the merge code to allow that as it's treated as a special case.

>When a file is deleted CVS creates an explicit deleted file on that branch,
>with it's own revision number. When a new branch is created (from the branch
>with the explicit deleted file) after the file is deleted, then that branch
>only has an implicit deleted file. Is that the way it works?

Yes.  Essentially in that case the branch will have the same revision
number as the deleted file, so it's deleted and appears not to exist
on the branch (if you create a file only on a branch with no HEAD
revision cvs automatically creates a dead 1.1.1.1 revision to hook the
HEAD and other branches to).  

Really the term explicit and implicit is misleading - CVS treats them
as the same thing...  the only difference is where the deleted
revision came from - as there's no 'does not exist yet' state it
overloads the deleted state.

>I'm guessing the problem comes from the difference between an implicit and
>explicit deleted file. It looks like CVS has a problem detecting the
>ancestor of an implicit deleted file. If this is a problem then would it be

It's more that the deletion is special cased on the code as there are
special conditions involved. eg. you merge a file which has been
deleted on branch1 but modified on branch2.. must force a conflict
there.

Tony




More information about the cvsnt mailing list