I find the cvs merge tool difficult to use. Here's why:
The most frequent scenario for me when there's a conflict is that I need to incorporate changes from both sides (local and repository changes). IDEA merge window makes this tricky because:
1. I can't see a detailed diff of just the conflict area. The whole conflict area is just red. Sometimes it's difficult to see the exact differences between the local and remote changes.
1a. If I use the 2-pane diff buttons in the toolbar, I lose track of where the conflict areas were.
2. If I apply one side (as a starting point, after which I plan to manually incorporate changes from the other side), everything turns white, and I lose track of exactly which section of code I was merging.
3. If I select code on the left or right side, and right-click (with the intent of copying the selected text), my selection disappears, and the context menu only shows the option to copy the whole area.
4. Another method for me to keep track of which changes I've merged so far would be to manually incorporate one set of changes (say, the left side), then click "Ignore change" on the left conflict area, to remove the red marking. If the right side conflict area was still marked red, it would remind me that I still needed to merge in the right side changes. But when you do ignore change on either side, the other side's conflict marker disappears too, so that strategy doesn't work.
5. When conflicts happen at the end of XML files, or message property files, the most common merge needed is just to copy the changes from both sides. This happens in java files occasionally too. This is easy to do with CVS' text conflict markers, since you just delete the markers, and viola, you've got both sets of changes remaining. This is harder to do in IDEA, because of the things mentioned above. I can't just "Apply change" from the right, and then "Apply change" from the left, because the left conflict marker goes away as soon as I apply the right-side changes.
6. The scroll-syncing between panes isn't great. I often run into situations when two of the panes are in sync, and the same area in the 3rd pane (often the left pane) is scrolled down off the screen. I imagine this is a difficult thing to get exactly right, but it seems like in general, then all the lines in the middle of the panes should line up with each other.
1. Treat the conflict markers on each side as needing to be dealt with individually. If I apply or ignore one side's conflict area, keep the other side's conflict marker there. Each sides' conflict marker must be dealt with independently.
1a. The conflict area in the middle pane should remain red, and should remain linked to the side panes, until both right and left conflict areas are marked as resolved.
This would lead to an easier resolution process:
a. Apply changes from the left to the middle. Left conflict area is cleared (or maybe marked in another color, like "pending resolution"?)
b. Invoke a diff of the middle and left conflict area (see diff feature below).
c. Manually merge in right changes in the 2-pane diff.
d. Mark right side changes as resolved (by clicking "Ignore change")
Or, alternately, change the options from "Apply change" and "Ignore change" to "Apply change" and "Resolved", where "Apply change" does not automatically resolve the conflict (it just copies the area to the middle pane, but conflict area markers remain in place).
2. Have an option to see a 2-pane diff for only the conflict area.
3. Possible add an option for "Append change", which, instead of copying the side pane's contents over the middle pane's, would instead append the side pane's contents to the end of the middle pane's conflict area. This would make case 5 above easier. Just apply left change, append right change, and done.
4. Improve scroll-sync.
Any comments? I'll file enhancement requests, but I wanted to get some feedback first.