[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