While you are working on a project in the Workbench, other members of your
team may be committing changes to the copy of the project in the repository.
To get these changes, you may "update" your Workbench to match the
state of the branch. The changes you will see will be specific to the branch
that your Workbench project is configured to share. You control when you choose
The update command can be issued from two places: the Team > Update
menu, or the Synchronize view. In order to understand the difference
between these two commands, it is important to know about the three different
kinds of incoming changes.
- A non-conflicting change occurs when a file has been changed remotely
but has not been modified locally.
- An auto-mergeable conflicting change occurs when an ASCII file has
been changed both remotely and locally (i.e. has non-committed local changes)
but the changes are on different lines.
- A non-auto-mergeable conflicting change occurs when one or more of
the same lines of an ASCII file or when a binary file has been changed both
remotely and locally (binary files are never auto-mergeable).
When you select Team > Update, the contents of the local resources
will be updated with incoming changes of all of the above three types. You can specify what
the update behaviour should be in the
Team > CVS > Update/Merge
preference page. The choices are:
- Preview all incoming changes before Updating: All changes will be displayed in either the Sync View or
a dialog (depending on your settings). You can then merge each change in line by line, or update all non-conflicting
changes at once and then deal with the remaining conflicts.
- Update all non-conflicting changes and then preview the remaining changes: All
non-conflicting incoming changes will be merged in automatically and any remaining conflicts will be
displayed either in the Sync View (default) or in a dialog. You can specify where to display conflicts
from the Update/Merge preference page.
- Never preview and use CVS text markup to indicate conflicts (default): This option will automatically
merge all changes in without any user interaction. Conflicting changes will be merged in using the CVS text markup:
<<<<<<< original file revision
= = = = = = =
>>>>>>> incoming file revision
You will then have to go in to each file that contains a merge conflict and edit the file to the desired final state.
It is often desirable to know what incoming changes there are before updating any local resources. These issues are addressed by
the Synchronize view.
To open the Synchronize view in incoming mode:
- In one of the navigation views, select the resources which you want to update.
- From the pop-up menu for the selected resources, select Team > Synchronize
with Repository. The Synchronize view will open.
- On the toolbar of the Synchronize View, click the Incoming mode
button to filter out any modified Workbench resources (outgoing changes) that
you may have.
In incoming mode, you will see changes that have been committed to the branch
since you last updated. The view will indicate the type of each incoming change.
There are two update commands (available from the context menu of any resource
in the view) to deal with the different types of conflicts: Update and
Override and Update. When you select the Update command in the
Synchronize view, all selected incoming and auto-mergeable conflicting changes
are processed while conflicts that are not auto-mergeable will not be updated
(any files that have been successfully processed are removed from the view).
The Override and Update command operates on conflicts and will replace
the local resources with the remote contents. This "replace" behavior
is rarely what is desired. An alternative is described later.
To update non-conflicting and auto-mergeable files:
- The Structure Compare pane at the top of the Synchronize view contains the
hierarchy of resources with incoming changes.
- Select all conflicting files and choose Update from the pop-up menu.
This will update the selected resources that are either incoming changes or
auto-mergeable conflicts and remove them from the view. Conflicts whose contents
are not auto-mergeable will be left in the view.
If your local Workbench contains any outgoing changes that are not auto-mergeable
with incoming changes from the branch, then, instead of performing an Override
and Update, you can merge the differences into your Workbench manually,
- In the Structure Compare pane, if there is a conflict in the resource list
(represented by red arrows), open it (either by double-clicking or selecting
Open in Compare Editor from the context menu).
- In the Text Compare area of the compare editor, local Workbench data is
represented on the left, and repository branch data is represented on the
right. Examine the differences between the two.
- Use the text compare area to merge any changes. You can copy changes from
the repository revision of the file to the Workbench copy of the file and
save the merged Workbench file (using the pop-up menu in the left pane).
- Once you are completed merging the remote changes into a local file, choose
Mark as Merged from the pop-up menu in the Synchronize view. This will
mark the local file as having been updated and allow your changes to be committed.
Note: The repository contents are not changed when you update. When
you accept incoming changes, these changes are applied to your Workbench. The
repository is only changed when you commit your outgoing changes.
Tip: In the Synchronize view, selecting an ancestor of a set of incoming
changes will perform the operation on all the appropriate children. For instance,
selecting the top-most folder and choosing Update will process all incoming
and auto-mergeable conflicting changes and leave all other incoming changes unprocessed.
Warning: The behavior of the Override and Update command described
above only applies to the incoming mode of the Synchronize view. In the Incoming/Outgoing
mode of the view, the behavior for incoming changes and conflicts is the
same but the command will revert outgoing changes to whatever the repository
contents are. Exercise great caution if using this command in Incoming/Outgoing
Team programming with CVS
Synchronizing with a CVS repository
Version control life cycle: adding and ignoring resources