When choosing how your development team should work, one question that may arise is whether you should use the Integrated Development Environment (IDE) provided with Visual Studio / Visual Studio .NET or use Vault as a separate application. In this document, we examine the pros and cons of these two alternatives.
As a precursor to this discussion, it is important to understand how the IDE client for Vault works. Visual Studio and Visual Studio .NET provide a set of APIs for all IDE clients to use. This API set is named MSSCC. MSSCC is a very loose API and various parts of each IDE treat it differently.
Additionally, these APIs have some limitations which will result in reduced functionality within the IDE. This reduced functionality will be consistent with any source code control provider whether it is Visual SourceSafe, Vault, or another version control system that integrates into Visual Studio / Visual Studio .NET.
Below is a list of issues to consider when making this decision. <ol>
<li><i>IDE client cannot refresh file lists to determine file version number.</i>
Often times, you may be working with a project and someone else has checked in a more recent copy of some of the files. In order to see a current view of the repository versions of the files, you would like to refresh the file list to see which files are now out of date. Due to the way MSSCC implements the function that performs this operation, Vault cannot update file version information without actually receiving the new version of the file or restarting Visual Studio .NET.
You can always do a <i>Check Out</i> or a <i>Get Latest Version</i> and receive the new file, but you cannot know ahead of time whether the file needs to be retrieved unless you stop and restart Visual Studio .NET.
The Vault GUI Client has a refresh command which can update the file list information on demand.
<li><i>IDE client does not show file status and allows you to specify which columns to view for folders. </i>
The Vault GUI Client allows you to see the status of every source file in a folder relative to its repository version. You can see: <ul>
<li>if the file is old
<li>if you have locally changed the file
<li>if the file needs merged
<li>if the file is more recent due to a repository rollback or pin
</ul>
Moreover, there are a number of configurable columns that can be defined in the Vault GUI Client, such as file size and version number. For more on file status, see <a href=http://support.sourcegear.com/viewtopic ... xplanation of Vault File Status.</a>
The Visual Studio IDE places the status feature within the properties dialog limiting you to viewing file properties one file at a time. Additionally, it has no such concept of configurable column information.
<li><i>IDE client cannot operate in CVS mode</i>
Vault can run in either edit-merge-checkin mode (CVS) or checkout-edit-checkin (VSS) mode.
In CVS mode, the developer makes edits to files in a local view, determines if there are any merge conflicts, and then does the <i>Check In</i>. In VSS mode, the developers specifically checks out the files they will work on, locks them from other users, make changes and then finally perform the <i>Check In.</i>
Unfortunately, the Visual Studio IDE has no concept of edit-merge-checkin mode, so it cannot support this development mode.
The Vault GUI Client can run in either mode and even allows you more discretion of how to operate from within each mode. (See Tools -> Options -> Concurrent Development style from the Vault GUI Client for more options).
<li><i>IDE does not contain certain source control functions, such as Get By Label, Branch or Merge Branches.</i>
MSSCC does not support <i>Get By Label</i>, <i>Branch</i> or <i>Merge Branches</i>. Therefore, similarly to other version control tools, the Vault IDE Client does not offer this functionality.
The Vault GUI Client does support these operations.
<li><i>Sometimes the IDE stores hard-coded path information in project files</i>
For some types of projects, such as web projects, Visual Studio .NET stores hard-code path information in the project files. This can cause mass confusion if someone branches a project from the GUI client and everyone does not unbind and rebind the project.
Since the IDE client cannot support <i>Branch</i>, the <i>Branch</i> must be done from the GUI, thus propagating the hard-coded path information for future IDE users. For more information on this issue, see <a href="http://support.sourcegear.com/viewtopic ... >Branching Web Projects</a>
<li><i>The IDE does not update renames and deletions until a Get Latest Version is performed. </i>
If someone renames or deletes a file, these changes will not be seen in the IDE until a <i>Get Latest Version</i> is performed. This issue is a cousin of the one listed above. Microsoft has a KB article that explains this issue in more detail as it relates to Visual SourceSafe. Since Vault uses the same API, the same issue applies to Vault as well.
<a href="http://support.microsoft.com/default.as ... ;305516</a>
<li><i>IDE does not allow for prominent on-demand command dialogs.</i>
When you <i>Undo Check Out</i>, you can choose either to overwrite the current working copy or to leave the current working copy unchanged on your local hard drive. In this way, you choose whether or not to lose local changes even though the file is no longer checked out. From within the IDE, there is a little icon in the upper left hand corner of the <i>Undo Checkout</i> dialog box presented by Visual Studio .NET that will display this choice to you.
There is no method to force this dialog box to be displayed automatically from within the IDE. We wish these option could be more prominent from within the IDE, but the source code control APIs provided by VS.NT do not allow it.
From within the Vault GUI, you can enable this dialog box to display automatically from the Command dialog pane in <i>Options</i>, or by holding down the shift key during the <i>Undo Check Out </i>operation.
For <i>Get Latest Version</i>, there are similar options you can configure. Go to Tools -> Options -> Source Code -> SCC Provider -> Advanced -> General. Check the box labeled "Always display command dialog on Get Latest Version". This will enable you to choose each time whether to overwrite or merge.
Alternatively, you can go to Tools -> Options -> Source Code -> SCC Provider -> Advanced -> Local files, and set "Modified working copy" to Overwrite. This will globally change what happens when you choose <i>Get Latest Version</i>. Remember, setting this option to Overwrite will always clobber local changes if you are working in non-exclusive checkout mode, and someone else has made a <i>Check In</i>. Note that the IDE will always force you to see the <i>Get Latest Version </i>dialog box or never show it to you.
The Vault GUI client has the capability to only show the dialog when necessary by use of the shift Key.
<li><i>The IDE forces item comments on checkout and transaction comments on check in</i>
Vault supports the notion of atomic transactions. Therefore, you can add both a comment for the entire transaction as well as comments on individual files that are part of that transaction. You can then view both the transaction comments, and the individual comments from within history by choosing "Details" for any given file version.
From within the IDE you get atomic transactions. However, since VSS has no concept of an atomic transaction, the IDE really doesn't allow elegant additions of both transaction comments and item comments. First, you must select the containing folder or project in order to get multiple files to check in at once, giving you the atomic transaction. The change set comment is entered at the time of the group check in. However, the IDE provides no place there to enter individual item comments, so the individual item comment must be assigned at check out. Of course, you may not know at the time of check out what type of comment you wish to add, but it is the only opportunity provided by the IDE.
In the Vault GUI client, there are separate controls for adding a transaction comment as well as an individual item comment at any time.
In summary, if all you ever want to do is simple operations such as <i>Check In</i> and <i>Check Out</i>, then SourceGear would suggest using either the IDE or GUI client. If you work in an environment where the source tree changes frequently, if you prefer the added capabilities that the IDE cannot provide, or if frequently work with labels and branches, SourceGear would strongly recommend using the Vault GUI Client.
IDE vs. GUI Client
Moderator: SourceGear