We've been using Microsoft's Team
Foundation Server for version control and basic work
item/requirements/bug tracking for about 9 months now. All in all
it's a good tool, though really it still feels like a version 0.8
beta that got pushed out the door a little early.
The Good
- It's a world better than Visual SourceSafe
- Superb integration with Visual Studio
- Performance is great locally, but also over a low-speed
pipe
- Security is well-defined and adequate
- Branching and merging works well
- Multiple files are checked in as a changeset, rather than
individually
- The requirements/work items/bugs functionality is half-decent,
albeit very unpolished and feature-poor
The Bad
- Some basic functionalities, such as rollback, are missing
(which is why I say that it seems like a pre-release beta in ways).
There is a powertool hack that lets you rollback a changeset, in
which case it checks out all of the affected files, does a get of
the pre-checked out files, and then checks in the old file(s),
leaving the "rolled back" version in the history.
The
application tier is incredibly fragile. If an
enterprising team member decides to do some clean-up directly in
the TfsVersionControl data-tier database (getting around missing
functionality in the tools -- for instance there is no way to
permanently delete, aka destroy, in the tools, remarkably,
so if someone checks in a 500MB file and you want to remove it,
you're forced to do it directly in the database), you will discover
that a single missing related record -- the database doesn't define
or enforce foreign-keys, so it isn't going to block the DELETE
command there -- will cause the application tier to die a
hundred deaths, excepting out on null values and other inanities.
This is made far worse by the fact that the application tier caches
a lot of lookup data, so check-ins/outs will work for a while after
these related records were moved, making a simple database rollback
impossible. Instead you need to go through every database manually
rationalizing all of the data, determining where the application
tier is dying.
The worst part is that many of the unfound lookups should be
complete non-events, either not displaying the unrelated records,
or putting in placeholders while indicating that an error occurred.
The idea that it takes down the entire version control system is
completely unreasonable, and it really
made me question the implementation.
- Offline support is non-existent in the front-end tools, with it
expecting a constant connection to the source control web services.
There is a dubious powertool that manually works by
removing the project from source control, and upon reconnection you
tell it to reattach and then do a sync.
The Ugly
- The application tier won't install on a domain controller, or
on a 64-bit system, both limitation being entirely unreasonable and
hindering for small shops.
All in all it's pretty decent, but I think they called it done a
little early.