svnversion-controlmergecontinuoussubversion-edge

SVN merging branch to trunk causes conflicts on files that have been resolved


I have been researching this on and off for weeks now so I do apologise if this has already been answered.

My main problem is merging after performing continuous merges.

I have my /trunk, from which I create my branch /branches/featureone. A developer then goes on to develop within said branch.

During this development the rest of the team go on to make minor bug fixes within /trunk. The branch is updated every day with changes from the trunk. We come to the end of the project and it's now time to merge back to trunk. This is where the problem occurs.

In this particular instance a lot of old, duff, files were removed from /trunk. This was merged successfully with /branches/featureone. So both trunk and branch have had these files removed.

I go to merge /branches/featureone into /trunk using TortoiseSVN with the following settings:

Imgur Link

Running with the Test Merge, suddenly the deletes are creating a shed load of conflicts. Delete with incoming delete. This also happens with any new files that have been added, file add with incoming add.

My question is how do I get around this? Isn't SVN meant to figure this out automatically? I can go on and manually select all revisions that aren't the merges from trunk but this seems wrong.

I'm running on TortoiseSVN 1.8.4 and Subversion Edge 4.0.4 (Subversion 1.8.5).

Our SVN structure is generally the following:

\---svn
     +---branches
     |   +---featureone
     |   \---featuretwo
     +---production
     \---trunk

We don't have versions, all of our customers have the same codebase (though this may change in future).

Any help will be greatly appreciated.


Solution

  • Your scenario looks a lot like you need to merge using the reintegrate option. Based on your screenshots you are trying to merge an set of revisions and not the whole trees. The TortoiseSVN documentation says:

    If the feature is going to take longer and you need to account for changes in trunk, then you need to keep the branch synchronised. This simply means that periodically you merge trunk changes into the branch, so that the branch contains all the trunk changes plus the new feature. The synchronisation process uses Merge a range of revisions. When the feature is complete then you can merge it back to trunk using either Reintegrate a branch or Merge two different trees. https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html