[Svnmerge] Using svnmerge in a subdirectory

Giovanni Bajo rasky at develer.com
Thu Oct 19 15:56:31 PDT 2006


Thomas Heller wrote:

> Ok, so it needs some options.  But how? I'm afraid I cannot
> understand the help it gives:

Hi Thomas. What is exactly you do not understand? I wrote that help so it's
clear to me; I'd need some guidance to fix it!

The command line format is this:

>   usage: svnmerge init [OPTION...] [HEAD]

The summary of the command is pretty clear I guess:

>   Initialize merge tracking from HEAD on the current working
> directory.

Now, there are two cases. Either HEAD is specified, or it is not specified. If
it is specificed:

>   If HEAD is specified, all the revisions in HEAD are marked as
> already merged; if this is not correct, you can use
>   --revision to specify the exact list of already-merged revisions.

So, if you specify an URL as HEAD, it means "initialize merge tracking against
HEAD, and assume that the branch is up-to-date: all the revisions currently in
HEAD have already been merged". If this is not true, you will need --revision
to tell which revisions have been already merged.

In your case, I assume that you want to merge something from the trunk into the
release25-maint branch. What you want to say is: "I never merged anything in
this directoy since it was created (the branch point)". Now this is exactly
what happens when HEAD is omitted. In fact the help says:

>   If HEAD is omitted, then it is computed from the "svn cp" history
> of the current working directory (searching back for the branch
> point); in this case, svnmerge assumes that no revision has been
> integrated yet since the branch point (unless you teach it with
> --revision).

So this is exactly what you want. The problem is that the "svn cp" was done at
top-level, and svnmerge.py is confused by this. I consider this a bug (or a
missing feature) in svnmerge.py. It should be able to support this case (HEAD
omitted) even from within a subdirectory of the one that was copied.

Right now, the best you can do is to explicitally specify the HEAD URL (which
would be something like "[...]/trunk/Modules/_ctypes") *and*
specify --revision=1-XXX, where XXX is the branch-point (the revision at which
the release25-maint branch was created). You can find out the branchpoint with
"svn log --stop-on-copy"; or, if you prefer, run "svnmerge.py init" top-level,
and look at the property it creates.

If this whole message is confusing for you, I'm probably abusing some
terminology you do not know. I suggest you then first read the svnmerge.py wiki
page which should give you a basic idea, and then get back to this message. If
the confusion persists, slap me and I'll try to explain better :)

Giovanni Bajo




More information about the Svnmerge mailing list