What is a Changeset?

Curious about the source control part of Microsoft Visual Studio 2005 Team Foundation? Tired of looking at feature lists and marketing hype? If so, here’s a word you can chew on for awhile:


When one of the hard-working developers on my team like Buck or James check in their code, their changes usually relate to a single developmental task or a small set of tightly-coupled tasks. I call these ‘task-specific checkins’.

More often than not, a task-specific checkin involves multiple, interdependent revisions to two or more files. Consequently, changes to a single file don’t usually make sense unless they are accompanied by thorough checkin notes, which of course they usually are because the Hatteras SDEs are the best of the best.

By inclination, training, and habit, software developers seem to reject the notion of performing tasks for which an automated alternative exists, or might someday exist.  They’re lazy, but smart lazy.  If you are a smart lazy developer, you are going to LOVE changesets in Visual Studio Team Foundation.

A changeset is a logical container into which VSTF bundles everything related to a single checkin operation. A changeset consists of:

  • source file and folder revisions (adds, renames, edits, deletes, moves)

  • related work items (bugs, etc)

  • system metadata (owner, date/time, etc)

  • checkin notes and comments

In a technical sense, a changeset is more than a logical container. A changeset is a version of the repository at a specific date and time.  Consequently, you can return your workspace (your personal view of the source control repository) to exactly the way it was when you fixed that pesky crashing bug sometime last month.  Oh! And it’s literally this easy to accomplish:

<C:\WS1> vstf Get /version:C349712

This command retrieves a working copy of all uncloaked files and subfolders from the repository to the local workspace with which the WS1 folder is associated as they were at the time when changeset #349712 was created!

When you’re done reflecting on the elegance of your bugfix, you can resync your local workspace to the latest repository version using the following command (assuming that WS1 is the root of the workspace).

<C:\WS1> vstf Get /recursive

Comments (10)

  1. Tom Slee says:

    Is the implementation of a changeset transactional, as it is in the excellent Perforce source control system?

    That is, either all or none of the files in a changeset are submitted.

  2. Yes Tom, checkins are atomically committed and fully transactional. To put a fine point on it, changesets are the final product of the checkin process. A changeset doesn’t exist until each and every file has been uploaded to the server. Prior to that time, we refer to the uncommitted entity as either a ‘pending changeset’ or ‘pending workspace changes’.

  3. Tom Slee says:

    Thanks. Your naming seems to follow perforce’s closely, except they talk about changelists and pending changelists.

  4. Hao Fang says:

    Oh, I am really very very disappointed about what you called "changedset". You may know MBF & ObjectSpace & SqlXml 2.0 use ChangeSet intensively in its kernel.

    I want to known some implementation detail and technique about "ChangeSet" in this meaning, how it compare to Fowler’s Unit of Work.

  5. Hao: FWIW, if you google on changeset you’ll notice other source control systems (GNU Arch, Bitkeeper, etc.) using the same term. When possible (and it makes sense), we try to reuse existing, established terms in the source control realm to help ease adoption of Hatteras by customers. Source control is just a tool (we’re just trying to be a very nice one 🙂 and steep learning curves, especially when they’re not necessary, are a waste of developer time and productivity. We’re trying to save developer time (lots of it), so making up new terms is something we’d like to avoid.

    As Tom notes, "changelists" is also an option, but a quick google shows it’s largely perforce-specific. That doesn’t make it bad, but the google hit count is well over an order of magnitude less, so it is a less desirable choice.

    Of course, Korby is our final word on such decisions (and he’s made excellent choices) so he may be able to explain better if there’s still confusion.

  6. This sounds very cool to me. I can’t wait until we have the CTP pieces in our hands to try it out.

  7. Ankur says:

    VSS provides IVSS automation interface to program. This interface is used to retrieve the information…

  8. Ankur says:

    VSS provides IVSS automation interface to program. This interface is used to retrieve the information…

  9. Ramakrishna says:

    Is there any way to set the unique changeset number for collection of files which will be modified to fix a defect or implement a change request?