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.
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:
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.
I couldn't properly follow the other answers, here's more of a dummies guide...
You can do this either way round to go trunk -> branch
or branch -> trunk
. I always first do trunk -> branch
fix any conflicts there and then merge branch -> trunk
.
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. (Eg Comparing different releases and then merging the differenct to yet another branch)
You should use "merge a range of revision".
To merge changes from the trunk to a branch, inside the branch working copy choose "merge range of revisions" and enter the trunk URL and the start and end revisions to merge.
The same in the opposite way to merge a branch in the trunk.
About the --reintegrate flag, check the manual here: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate
Take a look at svnmerge.py . It's command-line, can't be invoked by TortoiseSVN, but it's more powerful. From the FAQ :
Traditional subversion will let you merge changes, but it doesn't "remember" what you've already merged. It also doesn't provide a convenient way to exclude a change set from being merged. svnmerge.py automates some of the work, and simplifies it. Svnmerge also creates a commit message with the log messages from all of the things it merged.
Shift-Right单击文件夹并选择TortoiseSVN - > Merge All
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.