The merge scenarios of svk is described here, as of svk 0.08.
Mutually Merged
merge -a or smerge implements the star-merge algorithm by Arch's TomLord for finding the nearest ancestor as the merge base for mutually merged repositories.
The merge target records a property in the merge anchor in the following format:
<uuid>:<path>:<rev> which means the target has merged from the repository at <uuid>:<path> till revision <rev>.
Multi-Parent Branching
The merge ticket described above could still be used from downward merging.
However when merging back, the changes in your branch might be:
- local
- depends on the changes from the branch other than the one to merge into.
- not depending.
smerge merges all changes even from the other parents. The other case will be handled by the cherry-picking merge support described below.
Cherry-Picking Mergeback
Currently implemented as cmerge, to be cleaned up and use smerge to simplify the commandset.
Things get very simple if people create a branch for every feature or bugfix. But people are lazy (so they want to use version control systems instead of backing up all revisions!). So the idea is to create a branch as-if branched for that feature or bugfix and then merged into the working branch. In that case the merge ticket above and the merging mechanism could still be used. Also the on-demand branch creation could verify if the set of changes to be merged are consistent. Finally the interface should make this operation transparent but known to the users.
The idea came up in a dinner where AutrijusTang and ChiaLiangKao met in Feb 2004.
Baseless Merges
see BaselessMerges