In my project we have situations where we branch off from some Mainstream for important milestones like Beta and Release Candidates.
Once we ship the builds to customers, we merge code back to mainstream. This is a simple delivery operation without a rebase.
Now, there are also scenarios when we need to merge some very old stream(almost obsolete) to the Mainstream. I have found two options available:
1)Deliver to Alternative Target
2)Merge Manager
The option 1) is not allowed in our project.
My question is:
What is the difference between the two and why should one be preferred over the other?
Simple:
deliver to alternate target
(ordeliver to default
for that matter) is an UCM merge, which must follows UCM rules, in particular regarding activity dependencies, but also regarding Stream (you shouldn'tdeliver
from a parent Stream to a child Stream, that should be arebase
)Merge Manager
is a plain ClearCase merge, between two branches (and not Streams), which can deliver any subset of files from branchA
to branchB
, without having to follow any merge workflow.I usually see "Merge Manager" chosen for the case where UCM prevents the deliver because of an arcane "activity dependency" reason, even where there is none.
See "Clearcase UCM - Cross delivering vs. delivering upwards?" for an example of such a case.
Saying the "
deliver to alternate target
" isn't allowed, means that onlydeliver to default
is, which means you have to follow the merge workflow established by the hierarchy of Streams.An UCM merge bring a better visualization of merges between baselines, which means you know all the files a given component have been merged.
However, a Merge Manager being a plain merge, it can involve any two branches, and any two (or more) files. There is no higher visibility for that merge: it is a file-by-file operation (instead of a component -- or coherent set of files -- one).