This is another descriptive error message from SVN. “Retrieval of mergeinfo unsupported”
If you’re seeing this error message you’re probably trying to use the reintegrate merger feature in SVN. You probably just used a command like this one:
1
|
svn merge --reintegrate svn:
//foobranch
.
|
This error is caused by a configuration issue on your server, or a significant version mismatch between your client and server. It’s OK, though, this can be worked around pretty easily. Just fall back to the more reliable SVN 1.4 style explicit merger technique.
To use this approach you’ll need to know what revision you either created your branch from, or, if you’ve merged the trunk into your branch since creation, the revision you last merged into your branch. In this example, that revision is revision 42 (being the answer to the ultimate question)
1
|
svn merge svn:
//trunk
@42 svn:
//foobranch
.
|
Another option is to do an explicit revision to revision merger. This more low level syntax can be used for all sorts of crazy mergers including roll-backs and nonsensical mergers that will mess up your code. For this command you’ll need the revision from which you’d like to start your merger and the end revision. In this case I’ll be merging revisions 42 to 87. I’ll be merging these changes from the trunk to my current local path.
1
|
svn merge -r42:87 svn:
//trunk
./
|
Work around:
(You appear to be using svn 1.5 (since it introduced reintegrate). I
haven't gone into that in any depth because I'm only just making the
switch myself. I'm still using 1.4 + svnmerge.py.)
I don't think it much matters, as long as you understand what you're
doing. Here's the rub, as I see it:
(Think of the branch as a set of changes. The question is changes
relative to what?)
(1)
You've got changes on the trunk that are not on the branch. By merging
those changes to the branch you've brought your branch up to date with
trunk. The work represented by your branch is now exactly the
difference between the current state (HEAD) of you branch and the
current state (HEAD) of the trunk.
svn merge svn://repo/trunk svn://repo/branch working-copy-of-trunk-head
This means: compute the changes necessary to make svn://repo/trunk
identical to svn://repo/branch and apply exactly those changes to a
working copy svn://repo/trunk.
The safety of this operation depends critically on the fact that
you've previously merged all trunk changes since branch creation to
the branch.
This is the scenario that the merge --reintegrate option in 1.5 is
designed for. See also http://blog.red-bean.com/sussman/?p=92
(2)
You've not synced your branch with trunk. The work represented by the
branch is the set of changes between the creation of the branch and
its current state (HEAD). Those are the changes you want to apply to
a working copy of trunk.
To figure out the origin of your branch use
svn log --stop-on-copy svn://repo/branch
The last entry listed should be the one where the branch was created
(by copying from trunk.) Let's call that revision 100
svn merge -r100:HEAD svn://repo/branch working-copy-of-trunk
This means: gather all the changes that were made to the branch since
its creation (r100) and apply those changes to a working copy of the
trunk.
In either case, you'll want to inspect the results of the merge in
your working copy of trunk. Build and run unit tests if you've go
them. If it looks good, commit.
I would also recommend deleting the branch when you are done. You can
always create a new one from trunk if you need to continue work on
this feature.