I’ve been reading up on branching/merging with Subversion 1.5 using the excellent and free Version Control with Subversion book. I think that I understand how to use the Subversion command line client to perform the actions that I need most often, which are:
Update Branch with Changes from Trunk
From the branch’s working directory run:
svn merge http://svn.myurl.com/proj/trunk
Merge Branch into Trunk
From the trunk’s working directory run:
svn merge –reintegrate http://svn.myurl.com/proj/branches/mybranch
However, we are using TortoiseSVN 1.5 as our interface to Subversion. I would like to know how best to perform these operations with TortoiseSVN. The new dialog provides three different options on the main menu.
- Merge a range of revisions
- Reintegrate a branch
- Merge two different trees
From what I can gather, TortoiseSVN always executes svn with the following syntax.
svn merge [–dry-run] –force From_URL@revN To_URL@revM PATH
Additionally, reintegrate a branch often fails with a message stating that some targets have not been merged and so it cannot continue, and so I had to use option #3.
My questions are:
- How do I use TortoiseSVN 1.5 to merge changes from the trunk to a branch?
- How do I use TortoiseSVN 1.5 to merge the branch to the trunk, with and without the reintegrate method?
- Which of the above options should I use for each, and why?
EDIT
Through ‘dry run’ testing I have found that the command line Subversion operation
svn merge http://svn.myurl.com/proj/trunk
is analogous to option #1 (Merge a Range of Revisions) in TortoiseSVN, as long as I leave the revision range blank.
The behavior depends on which version your repository has. Subversion 1.5 allows 4 types of merge:
Subversion before 1.5 only allowed the first 2 formats.
Technically you can perform all merges with the first two methods, but the last two enable subversion 1.5’s merge tracking.
TortoiseSVN’s options merge a range or revisions maps to method 3 when your repository is 1.5+ or to method one when your repository is older.
When merging features over to a release/maintenance branch you should use the ‘Merge a range of revisions’ command.
Only when you want to merge all features of a branch back to a parent branch (commonly trunk) you should look into using ‘Reintegrate a branch’.
And the last command -Merge two different trees- is only usefull when you want to step outside the normal branching behavior. (E.g. Comparing different releases and then merging the differenct to yet another branch)