How to merge branch back to trunk in SVN with all commit history? I know in Git I can use merge -squash. Is there any equivalent command in SVN? I am using SVN 1.6.
You can save each changeset as a diff and then commit each one atop the trunk. This is commonly called "transplanting", and there are various tools to do this automatically.
I'm a bit rusty with merging, but shouldn't that do the trick ?
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
See:
svn merge --help
It sounds like you want to:
- Merge from possibly several branches.
- Have all the merges properly recorded as such.
- Commit as one new revision only.
I think this is supported by the underlying SVN architecture. But I don't know if there are any clients that provide it (though svnmucc will do it for multiple cp
, mv
, rm
commands). Unless you want to do more research than I have (which would not take much), or write your own client which can drive the SVN libraries to do it (which may be hard but still doable); then I think you will have to sacrifice one of 2. and 3. above.
(If you sacrifice 3 you could dump the repository immediately after and hack the dump file to use one revision only, but I don't think it's worth the risk just to have a minutely simpler revision history...)
With Subversion 1.5 or later the merge is recorded on your local working copy in the svn:mergeinfo property. So this information is not lost.
You can see the merged revisions if you use svn log -g
instead of the normal svn log
.
Normal merges are performed as
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
But if you use a branch it is sometimes more convenient to use a reintegration merge. In this case you should first merge all trunk changes to the branch using something like
svn merge svn://server/trunk my_branch_wc
(This merges everything that is not already merged)
And after you commit this change to the branch you can use
svn merge --reintegrate svn://server/branch my_trunk_wc
To move all changes over as a single commit. (After this operation you should remove the branch)