What is the proper way to do a Subversion merge in

2019-03-08 02:36发布

I'm pretty used to how to do CVS merges in Eclipse, and I'm otherwise happy with the way that both Subclipse and Subversive work with the SVN repository, but I'm not quite sure how to do merges properly.

When I do a merge, it seems to want to stick the merged files in a seperate directory in my project rather than overwriting the old files that are to be replaced in the merge, as I am used to in CVS.

The question is not particular to either Subclipse or Subversive.

Thanks for the help!

9条回答
该账号已被封号
2楼-- · 2019-03-08 02:57

Merging an entire branch into trunk

  1. Inspect the Branch project history to determine the version from which the branch was taken

    • by default Eclipse Team "History" only shows the past 25 revisions so you will have to click the button in that view labeled "Show All"
    • when you say "Show All" it will take you back past the branch date and show you all the history for trunk as well so you'll have to search for your comment where you branched
    • NOTE: if you use Tortise SVN for this same task (navigate to the branch and select "Show Log") it will show you only the branch history so you can tell exactly where the branch began
  2. So now I know that 82517 was the first version ID of the branch history. So all versions of the branch past 82517 have changes that I want to merge into trunk

  3. Now go to the "trunk" project in your Eclipse workspace and select "right click - Team - Merge"

  4. The default view is the 1 url merge

    • select the URL of the branch from which you are merging
    • under Revisions select "All"
    • press OK
  5. This will take you to the "Team Synchronizing" perspective (if it doesn't you should go there yourself) in order to resolve conflicts (see below)

Re-Merging more branch changes into trunk

  1. Insepct the trunk project history to determine the last time you merged into trunk (you should have commented this)

    • for the sake of argument let's say this version was 82517
  2. So now I know that any version greater than 82517 in the branch needs to be merged into trunk

  3. Now go to the "trunk" project in your Eclipse workspace and select "right click - Team - Merge"

  4. The default view is the 1 url merge

    • select the URL of the branch from which you are merging
    • under Revisions select "Revisions" radio button and click "Browse"
    • this will open up a list of the latest 25 branch revisions
    • select all the revisions with a number greater than 82517
    • press OK (you should see the revision list in the input field beside the radio button)
    • press OK
  5. This will take you to the "Team Synchronizing" perspective (if it doesn't you should go there yourself) in order to resolve conflicts (see below)

Resolving Conflicts

  1. You should be at the "Team Synchronizing" perspective. This will look like any regular synchronization for commit purposes where you see files that are new and files that have conflicts.

  2. For every file where you see a conflict choose "right click - Edit Conflicts" (do not double click the file, it will bring up the commit diff version tool, this is VERY different)

    • if you see stuff like "<<<<<<< .working" or ">>>>>>> .merge-right.r84513" then you are in the wrong editing mode
  3. once you have resolved all the conflicts in that file, tell the file to "mark as merged"

  4. once all the files are free of conflicts you can then synchronize your Eclipse project and commit the files to SVN

查看更多
Ridiculous、
3楼-- · 2019-03-08 02:57

I typically check out both branches and then use the compare to each other option which does a synchronize-like compare of the two source trees. After integrating the changes into one branch, you can recommit back to the repository.

查看更多
姐就是有狂的资本
4楼-- · 2019-03-08 03:01

I would advise not trying to use Eclipse's plugins as your primary access to Subversion.

If you are developing on Windows, TortoiseSVN is the best program that I have seen for Subversion access. Explore to the directory of which you wish to merge, right click on it and use the Tortoise SVN merge option. Assuming a non-interactive merge, once you get conflicts, you'll have to go through each conflicted file and edit the conflicts before marking them as resolved. For this process I recommend a program called KDiff3, which shows your local repository copy (what was stored in the .svn before the merge), your local copy (including any changes), and the copy coming from the repository, and allows you to easily see (and even hand-modify if needed) the result of the merging. It also handles a bunch of minor conflicts automatically.

KDiff3 is portable, TortoiseSVN is a windows shell extension, so if you're using another environment, I would try to just use SVN to merge. But that would be much more of a pain :)

查看更多
Anthone
5楼-- · 2019-03-08 03:04

I landed here because I was looking for a way to merge in an external merge editor (KDIFF3) but start the merge from eclipse. I wasn't satisfied with the answers provided above. So here is ho to configure kdiff3 as merge and diff editor for SVN in eclipse:

go to Windows -> Preferences → Team -> SVN -> Diff Viewer Add a new config (add button): Extension or mimetype: * - if you wish you can specify different mimetypes for different editors, I didn't need that thus the alquantor.

Diff: Program path C:\Program Files\KDiff3\kdiff3.exe (or wherever you have your merge editor - sry for the windows path, feel free to add a linux version in the comments or edit this answer.)

Arguments: ${base} ${mine} ${theirs}

Merge: Program path C:\Program Files\KDiff3\kdiff3.exe

Arguments: ${base} ${mine} ${theirs} -o ${merged}

This will probably work as well for other merge editors, but with a different argument syntax (figure it out an let us know :) ).

The usage is as usual (team->edit conflicts) for merging and compare->foo for the diff view.

Cheers

查看更多
够拽才男人
6楼-- · 2019-03-08 03:08

openCollabNet's merge tool for subclipse is pretty neat. There are many merging types available and the merging I just performed with it when seamlessly. I recommend it.

查看更多
Ridiculous、
7楼-- · 2019-03-08 03:10

The one thing that syncrhonize view in eclipse lacks is check-in capability. In Team synchronization view I can view all my changes and resolve conflicts, so it would be rather intuitive to check-in right there instead of going back to java view and do check-in.

查看更多
登录 后发表回答