You assign stream types according to the stream’s expected usage, stability and flow of change:
There is also a virtual stream type and a task stream type. See Task streams and Virtual streams, respectively.
On a scale of stability, a development stream is considered less stable than its mainline stream parent, while a release stream is considered more stable than its mainline stream parent. Change is expected to flow down by merging, and up by copying. This “merge down, copy up” practice assures that merging is done only when necessary, and always in the more forgiving of the two streams involved.
Merging means incorporating another stream’s changes into your stream, and can require you to resolve conflicts. Copy propagates a duplicate of the source stream to the target. The following diagram shows a basic stream hierarchy: changes are merged down (to streams of lesser stability) and copied up (to streams of greater stability):
| Stream Type | Stability | Merge | Copy |
|---|---|---|---|
|
|
Stable per your policy (for example, all code builds) |
from child (from release, or to development) |
to child (to release, or from development) |
|
|
N/A; used to filter streams |
N/A |
N/A |
|
|
Unstable |
from parent |
to parent |
|
|
Unstable |
from parent |
to parent |
|
|
Highly stable |
to parent |
from parent |