![]() |
|||||||||
| SnapshotCM Concepts | ||||||||||||||||||||||||
IntroductionSnapshotCM is a configuration management solution designed to simplify the task of managing change. SnapshotCM offers the standard features you have come to expect from CM products: version control of files, change locking, branching and merging. In addition, SnapshotCM provides fast, simple and error-free project release management as well as sophisticated team coordination. Most CM tools focus on versioning files and perhaps directories. SnapshotCM goes beyond this by providing project level versioning. In project versioning, a complete hierarchy of files and folders is versioned together--simply and efficiently. SnapshotCM provides the means to instantly branch a project, quickly compare versions of a project, and easily copy changes from one version to another. In SnapshotCM, a version of a project is called a snapshot. Understanding snapshots is key to understanding SnapshotCM. Understanding how snapshots and the other SnapshotCM objects solve common CM problems will enable you to make effective use of SnapshotCM. And that is the purpose of this document. Read on! This document covers the following materials: Key ObjectsProjectsProjects are the overriding organizational tool for SnapshotCM. Projects contain a collection of snapshots, each representing a unique version of the project. A project organizes and graphically depicts the relationships between the snapshots. Some snapshots reflect past project releases while others reflect current or future releases. Some hold intermediate states, some serve as containers for integration of changes, and others isolate individuals or groups from changes being made by others. SnapshotCM stores a project in a SnapshotCM database managed by a centrally located SnapshotCM server. A SnapshotCM server can manage multiple projects, but a project cannot be split across multiple servers. SnapshotCM clients access the server remotely using the TCP and IP protocols. When defining projects, consider that they are independent and complete elements. Each project is separate from other projects and data cannot be passed from one to another. Release management is much easier when a project manages all elements that will be released together. Depending on what type of environment you work in, a project can manage anything from a released product to a set of internal documentation. SnapshotCM allows flexibility in the way you structure the snapshots in your project depending on the complexity of your project and the size of your team. Figure 1 shows four snapshots, plus two workspaces.
Examples
SnapshotsA snapshot stores a malleable parts-list or state of the files, folders and attributes that represent a particular instance of your project. As changes are applied (through check in or other attribute changing operations), the snapshot also changes. Whenever a snapshot state becomes something with meaning that you want to preserve, you simply create a copy of the snapshot (an instantaneous operation). You can then freeze that copy by setting the freeze flag on the snapshot and/or use the access control mechanisms of SnapshotCM to prevent further changes to the snapshot. In order to adequately support versioning complete project states, SnapshotCM stores the following types of attributes for each file or folder in a snapshot:
Since any of these attributes may change between snapshots, SnapshotCM supports comparing and copying changes to any of these attributes between snapshots. That is, you can safely delete obsolete files and directories, and rename or change whatever attributes are necessary for on-going work without losing either the old names or the association between the old and new names. This means that if a defect is fixed in a patch to the old named file, that change can be propagated to the current work easily. Snapshot TypesJust as projects provide an overriding organizational tool, snapshots provide a way to organize your development hierarchy. You can structure your snapshots in a variety of ways to support the size of your team, whether one person or many. Also, snapshots allow you to set up how your team coordinates changes and how files will be managed during development. SnapshotCM offers two types of snapshots for your project structure:
Project snapshots are the top level of the development hierarchy and allow teams to maintain a stable code base. Project snapshots allow you to organize past product releases and plan for future releases. Development snapshots are the basis of your development hierarchy and allow development teams to isolate and coordinate changes until the code is stable enough to move up into the project snapshot that anchors a hierarchy of development snapshots. Both types of snapshots contain virtual copies of all project files. You can think of a snapshot as a particular view into the archive. The archive is located on the SnapshotCM server and is where the archive files (along with all revisions for each file) are permanently stored. Both project snapshots and development snapshots keep track of the specific revisions that are used to make up the unique view of the archive that a snapshot maintains. Figure 2 shows a sample development hierarchy with three project snapshots and three development snapshots. While workspaces can be attached to, and modifications made to any snapshot, even project snapshots, there are situations where a development hierarchy can be advantageous.
Project SnapshotsProject snapshots form the top level of your project structure, providing an organizational tool for project releases (see figure 3). You use project snapshots to manage:
Project snapshots contain a virtual copy of all files for a particular version of your project, and maintain a view of which archive files and revisions are contained in each project snapshot. They also organize your project structure by providing a top-level structure from which to coordinate development snapshots and personal workspaces.
Using Project Snapshots Instead of TagsIf you are an experienced user of CM tools, you are probably familiar with using tags (or symbolic names) to keep track of branches in your development. With SnapshotCM, tagging is not necessary since all files for a version of your project are contained in a snapshot. That snapshot acts as the tag. For example, all appropriate files and folders, together with associated attributes to be used for Release 2.0 of your project, are contained in the project snapshot named Release 2.0. By using SnapshotCM project snapshots, you eliminate the risk of losing or incorrectly tagging files. You can create as many project snapshots as you need to maintain your project and the correct file revisions and attributes will always be in the snapshots you have defined. Because creating new project snapshot is equivalent to tagging all files in the source snapshot, you will never need to tag and re-tag individual files again. Examples
Development SnapshotsDevelopment snapshots represent the team change coordination model of your team. It is an organizational tool that allows you to:
You create development snapshots by copying a project snapshot so that all files in the project snapshot are also contained in the new development snapshot. This way, work can be tested and approved in the development snapshot with full access to all files. The project snapshot remains stable because the development snapshot is used for changes and testing. Development snapshots let you make changes to your project and test how these changes perform without affecting other teams working on the same project (see figure 4). Depending on how you plan to use the development snapshot and how your project structure is organized, a development snapshot is either linked to a project snapshot or to another development snapshot. Every development snapshot is part of a development snapshot hierarchy rooted with a project snapshot. Every project snapshot can have its own development snapshot.
Using Development Snapshots for IntegrationUsing development snapshots to organize your project structure can provide flexibility and protection for your development teams. You can use a development snapshot as a place to integrate and test the changes from all teams before affecting release files. As figure 4 shows, this integration development snapshot can be placed below a project snapshot so that no changes can be moved into a stable snapshot of your project without passing through the integration snapshot for testing. Examples
Snapshot RelationshipsRelationships between snapshots allow you to perform operations between them, such as moving changes from one snapshot to another. Relationships also give you a view of your project structure, graphically representing the relationship between one snapshot and another. You create a relationship by copying one snapshot to create another snapshot. In the figures in this document, the arrows represent the relationships between snapshots. SnapshotCM uses two types of relationships:
Sequential RelationshipsSequential relationships refer to connections between project snapshots and are automatically established when one project snapshot is copied to create another project. Relationships can also be manipulated manually to reflect new or modified relationships. Sequential relationships are part of the road map of your project releases and they allow you to move changes between one project snapshot and another. ExampleAfter your team has completed Release 1.0, a customer calls to report a defect in your product. From your project snapshot Release 1.0, you can create a new project snapshot called Patch. The arrow between Release 1.0 and Patch shows the relationship. By adding an additional relationship from Patch to Current Development, fixes applied to the patch can easily be propagated into the current work. See figure 5.
Hierarchical RelationshipsA hierarchical relationship is a parent-child relationship between two snapshots. A parent snapshot is above a child snapshot (closer to the root) in the development hierarchy (see figure 5). Hierarchical relationships allow operations to be performed between the two snapshots in either direction. ExampleOnce the GUI and Database teams have reached some stability, they get the latest changes from Integration, resolve any problems and then promote their changes into the Integration snapshot. Once all teams have promoted and testing is completed, the stabilized set of changes in Integration is promoted into Current Development, making Integration available for the next round of changes. WorkspacesA workspace is an area on your local machine where you do project development without affecting the rest of the project. While project and development snapshots give you views into the archive, your workspace contains local copies of some or all of the archive files from a snapshot. Every workspace must be associated with (or mapped to) a snapshot (project or development). The snapshot that a workspace attaches to is its mapped snapshot and the mapped snapshot contains the archive files that you will use (see figure 6). Files in workspaces can be modified and new files created, but the snapshot is not affected until check in. Other attribute modifying operations, such as rename and delete, are performed on the snapshot and the workspace together. In figure 6, Amy's and Joe's workspaces are mapped to the GUI snapshot, while Tim's and Meg's workspaces are mapped to the Database snapshot. SnapshotCM associates a file structure in the workspace that corresponds to and mirrors the complete file structure in the mapped snapshot. The folders and files in your workspace will have the same hierarchical organization as in the mapped snapshot. In other words, there always will be a place in a workspace for every file in a snapshot. As with snapshots, workspaces are important organizational tools that help you control and maintain your project. But more importantly, workspaces are where you perform the actual work of project development.
Examples
Working SetMost SnapshotCM operations act upon a subset of files and folders selected by the user for that particular operation. SnapshotCM also supports operations that operate on a working set. A working set is a pre-defined subset of the files and folders in a snapshot. Workspace-wide operations use the working set to restrict action to just the files and folders you need for your particular tasks. And since only changes within your working set will be updated during workspace update, your workspace will not be cluttered (and disk space used) by files you don't need, and the operation will be much faster. Each entry in a working set specifies a file or folder to add to the working set. Folders also have a flag indicating whether the folder should be operated on recursively, or if only the items directly within the folder should be operated on. Key OperationsIf you work on a small project, you can operate effectively with a single project snapshot per release. Larger teams have complex environments that need more powerful operations supported by multiple snapshots. Whether you work on a small or large project, SnapshotCM allows you to work effectively by providing operations to fit your needs. The operations that SnapshotCM offers can be divided into two categories:
Workspace operations are performed between a project or development snapshot and a workspace. These operations include checking in a file, checking out a file and updating your workspace (Figure 7).
Snapshot operations are performed between two snapshots. These operations include comparing snapshots, promoting or copying changes between snapshots, creating new snapshots, manipulating snapshot relationships and changing snapshot properties (see figure 8).
Workspace OperationsChecking Out Files You can check out a file with read-write (locked) or read-only (unlocked) permissions. Use the locked option when you want to make changes to the file, and use the unlocked option when you simply want to read the file from your local system. SnapshotCM allows you to check out multiple files in one operation. Checking In Files Updating Workspaces Importing Files and Folders Changing Mode, Renaming and Deleting Files and
Folders Changing Check In and Check Out Attributes Snapshot Operations Updating Snapshots Promoting Snapshots Merging Snapshots If you promote or copy changes from one snapshot into another, your changes affect the rest of your team. Therefore, you perform a merge to resolve any conflicting information within the files before promoting or copying those changes. For example, if two team members made conflicting changes to the same file, a merge between the two files will need to be completed before any copy or promote involving that file can be performed. To resolve conflicts, you need to attach a workspace to the target (child) snapshot and manually resolve the conflicts. Comparing Differences Creating A Snapshot A new snapshot can be created as a New Development Snapshot, or, if the source is a project snapshot, as a New Project Snapshot. New project snapshots can be inserted before the existing snapshot, taking over any predecessor relationships, or it can be added as a successor of the existing snapshot. Freezing a Project Snapshot To freeze a project snapshot, you first create a new copy of the snapshot, choosing the insert as predecessor option. Then you select Snapshot -> Properties and select freeze on the copy. It is important to make and freeze the copy so that your development hierarchy can continue to be used on the existing snapshots. Development ModelsOrganizations often use several software development models during the life-cycle of their products. SnapshotCM supports any model you choose because it offers flexible project structures and powerful organizational tools. The following section gives you examples of how you can use SnapshotCM for different types of development. Sequential DevelopmentDuring the life-cycle of your project, you may want to save certain stable instances of your project for future reference or use, such as beta releases or completed releases. By copying a project snapshot that you will freeze for future reference, you are creating a checkpoint snapshot. These checkpoint snapshots not only give you an archive of important releases, but they also provide you with a road map of the life of your project (see figure 9). SnapshotCM automatically creates these virtual copies for you when you create a new project snapshot and choose to insert it before the selected snapshot.
Patch DevelopmentSnapshotCM lets you easily create a patch snapshot from any project snapshot. The patch snapshot is an exact copy of the selected project snapshot, but is ready for modification. Patch snapshots are usually created as successors of existing snapshots (see figure 10).
You can use a patch snapshot when you want to make a change in your project that needs to be completed before the next major project snapshot is finished. After you create a patch snapshot and make the desired changes, you can, by creating a relationship from the patch snapshot to the current snapshot, merge the patch changes into the current work. Patch snapshots are useful for:
Parallel DevelopmentYou may want to create parallel project snapshots to work on multiple releases of your project simultaneously. By combining checkpoint and patch snapshots, parallel development is established, as well as a common baseline (see figure 11). As always, each new snapshot is an exact copy of the original snapshot when first created. The checkpoint snapshot provides a snapshot of the state of the project snapshot at the time the parallel development begins. The patch snapshot provides an additional project snapshot where parallel product development can commence.
Modified SequentialFrequently a team will want to start on the next project release before the current effort is completed. Figure 12 illustrates how snapshots can be used in this situation. Here, Release 2.0 represents the unfinished current work and Next Releasethe next release work. The relationship from Release 2.0 into Next Release allows changes made after the split to be propagated forward into Next Release. SnapshotCM automatically identifies all changes to Release 2.0, making the forward copy generally straightforward.
This model differs from the parallel and patch models in development intent. If you intend to perform divergent development, the parallel model is more appropriate. And the patch model is more clear if one is creating a patch to something that is frozen. The presented models focus on use of project snapshots. Development snapshots can also be used for most of these purposes. However, since the relationships are much less natural and not graphically depicted, this use is not recommended. Development snapshots are best used for team isolation and coordination. SummarySnapshotCM represents a shift away from file revision focused CM tools. SnapshotCM takes care of the details of which revision of which files (and indeed which files) belong to a release and allows you to focus on releases rather than files. SnapshotCM automates the identification of changes between releases, and makes easy the propagation of changes from patches into on-going development. SnapshotCM provides a development model that fits well into the way development projects typically operate. In summary, SnapshotCM provides advantages for all types of users:
SnapshotCM, in all of these areas, strives to make software development just a bit less complex. And in the middle of a long day, wouldn't it be nice to know that SnapshotCM handles the details so you don't have to. For more information on SnapshotCM, please see http://www.truebluesoftware.com. |
| Product Info | Testimonials | Documents | Licensing | Company Info | News | Download | Home | Simplify CM | ||
| Copyright © 2000-2006 True Blue Software Company. All rights reserved. |