Jan 24 at 6:31 PM
Edited Jan 25 at 4:12 AM
I choose TFS for all of my open source projects because:
(EDIT: Changed the term "team" to "dev")
- It meets all of my basic needs when developing open source software on CodePlex:
- Get Latest (Only really useful where dev > 1)
- Check In
- Check Out
- View History
- Resolve Conflicts (Only really useful where dev > 1)
- It's very simple to use.
- It integrates seamlessly into Visual Studio.
- It requires no command-line knowledge; i.e., it's entirely UI-driven. However, it also offers a command-line for advanced scenarios (which I never need).
- It's the original source control system used by CodePlex and many of my previous employers, so I have more experience with it than any other.
I had used SVN at a previous employer and found it to be difficult and unpleasant to use, especially with Visual Studio. The developers in our company that were using Visual Studio 100% of the time, including myself, agreed
that SVN was not the best choice. We wanted as much transparency in our source control system as possible, which meant avoiding the command-line and shell extensions, instead opting for simple context menu commands in Visual Studio. We also
wanted to avoid having annoying artifacts in the file system, such as .svn or .vss folders. We had tried installing SVN plug-ins for Visual Studio, but IIRC they had bugs and none of them were nearly as seamless or as easy to use in general
as TFS. The company eventually transitioned to using TFS source control and task management for all their projects, not just .NET projects. I was primarily responsible for maintaining source control along with one other person.
We decided to install SVN Bridge so that our Java developers and Mac users (designers) could use the same source control. They found it to work well with their Java/Mac dev tools, so TFS was a big
unifying win for the company.
More recently, I've taken a look at Hg and GIT so that I can contribute to other projects here on CodePlex. It seems Hg and GIT are even more complicated than SVN, though they also have some similarities; e.g., they're both command-line driven
and they seem to push shell integration as their primary GUI. I'll never understand the appeal of shell integration - it's not like my computer is only useful for programming. I.e., I don't see my entire file system as a bloated source
control client :)
Furthermore, neither appear to offer simple commands to accomplish common tasks like those listed above. For example, when researching GIT, I asked How to Get Latest From Source Control?
and What Commands are Supported in the GUI? The answers were surprising to me. In response to the latter question:
For your example "Get Latest" I would suggest using rebasing. Which is quite simple to use.
[snip - 8 step procedure]
So you have the latest and your changes combined. This is just a typical workflow I use and suggest. There might be different point of views out there :)
Quite simple to use? 8 steps? Typical workflow? Different points of view? All to simply
Get Latest, which TFS offers as a discrete command? Sorry, but GIT is certainly not going to be my first choice. I still haven't quite figured it out yet :)
I don't know much about Hg, but I suspect that it's similar to GIT. At the very least, given that it seems to rely on Python scripts and a command-line interface, I highly doubt that it gives the seamless experience in Visual Studio that I get
with TFS, even if I used VisualHg. (Note that I've already tried, briefly.)
So to answer your question:
Even if I could get the same seamless experience using a source control system other than TFS, perhaps a better question is:
Full Disclosure: I'm not entirely a TFS enthusiast. I've found that it has problems too, some of which were very frustrating. (Though maybe they've been resolved in the latest version - I don't know yet.)
For me, the perfect source control system would be one that never prompted me for anything and offered no context menu items at all, perhaps with the exception that sometimes I like to view history and comparisons. Mostly it would be as if it
wasn't even there. 99% transparency. Perhaps that's an entirely naïve and idealistic perspective, especially when considering the need for conflict resolution (or is there really a need for it?), but that's how I feel. Remember that
I mostly work as an individual, so source control to me probably has a different meaning than to those people that mostly work on teams.
Jan 31 at 6:32 AM