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.
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.
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 normalsvn log
.Normal merges are performed as
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
(This merges everything that is not already merged)
And after you commit this change to the branch you can use
To move all changes over as a single commit. (After this operation you should remove the branch)
To create a merge of a branch and create a single commit for each commit in the branch you can use a script, I'm using the following:
This will check out each revision you specify for the specific branch and perform a commit on the current directory, thus preserving each single change with the corresponding message.
I'm a bit rusty with merging, but shouldn't that do the trick ?
See:
It sounds like you want to:
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...)
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.