The recommended way of doing the parallel development in Dimensions CM is to use streams. Streams represent branches of development. They contain files and folders, keep track of their revisions, history and pedigree.
Different teams may use separate streams for parallel development. A stream may be created based on a mainline stream or project and merged to it later.
You can work with streams using the command line, in the desktop and web clients, the Windows Explorer or any of the IDE integrations.
Topic streams are private development branches by default only visible to the originator. With topic streams you can:
- Isolate work from an existing public stream
- Hide the changes until they are ready to be merged back into a public stream
- Create a backup of your local changes in the repository when you need to switch to other task. This is called shelving
- Use pull requests to automatically integrate changes to the parent stream
Projects may also represent a branch of development. Unlike streams they employ the exclusive lock model, where developers request write access for a file before making changes. Projects are more suitable for: managing non-software assets or large binary files, work in a regulated environment or for using remote replication.
Different people may need to work on the same files for different purposes. In this case, projects use version branches to separate concurrent revisions of the same file, and those revisions need to be consolidated (merged) on a file level.
- Items. The stream contains a list of item revisions, it owns items
- Requests. By default any created request is related to a stream, but it may be not related to a stream. The requests may be listed in a stream inbox or catalog view and used for delivering changes. A stream may be configured to always require a request for delivering changes
- Other streams/projects. The stream may be based on another stream or a project or be parent to a child stream.
- Baselines. Baselines are snapshots of a stream state at a particular time. Baselines are created based on a stream or may be used by a stream.
Streams enable interactive update-modify-deliver-merge process for developers.
- Use Update to get content from the remote repository to a local work area
- Make local changes, build and test
- Use Deliver to commit changes to a repository
- Streams maintain the single line of descent for item revisions, this ensures that files in the repository don’t have revisions with conflicting content
- Developers don’t obtain an exclusive lock for files, and that allows to work on the same files in parallel
- Use Merge to reintegrate the changes between the development branches.
- Interactive merge allows to resolve any conflicting content
- Pull requests automate merging from a topic stream to a parent stream