views:

132

answers:

5

In my day job, we use Visual Source Safe for version control. In my moonlight software development, I haven't as yet committed to a version control product. I'm presently backing up at the end of each day to a couple of external drives. This is obviously just a half-baked disaster recovery effort, not version control. I don't have tons of cash to outlay for this, so am looking for recommendations about decent, free or very cheap version control for a Windows environment running Visual Studio 2008 and 2010.

I've heard of Git (open source), and I've looked at Vault (commercial, but apparently free to a single-dev shop). Any opinions on these or others that I have not yet heard of will be appreciated!

+2  A: 

Git, SVN, and Vault are all very good. Vault is more like Visual Source Safe than the other two and has great multi-user locking mechanisms. Git is great for large projects with multiple developers. SVN is mature and popular and it's very easy find help online.

All three can integrate directly with Visual Studio 2010.

I enjoy using SVN.

jojaba
+1  A: 
  1. You can use Mercurial (hg) (http://mercurial.selenic.com/) which is very similar to GIT.
  2. There is Bazaar (http://bazaar.canonical.com/en/)
  3. CVS

According to me best of all the SCM's would be GIT

UPDATE : This might help you to choose the proper one http://bit.ly/bApYmy

Madhusudhan
GIT! Are you mad??? (+1 anyway ;)
msw
my buddy, GIT is really awesome! http://bit.ly/bApYmy
Madhusudhan
The page at the end of your link doesn't seem to show that any of them are particularly preferable to any other. All the desireable options are "Y" for all of them. How does it help? :-)
Cyberherbalist
Git's name isn't an acronym, so just Git will do fine instead of GIT (unless you like yelling the name all the time, which is cool I guess :)
Dan Moulding
+1  A: 

I would probably go with git, but check out Mercurial and SVN too. Git and Mercurial are dstributed VCS (DVCS) whereas SVN is a centralized VCS - as I believe is VSS.

Jonathan Leffler
+1  A: 

You should have a look at github. No need to host storage or backup, except perhaps to make sure that you drop a clone onto something other than your main system from time to time.

bmargulies
+6  A: 

You'd get less debate and more reasonable discourse asking questions about religion. :-)

You must get off SourceSafe. It loses files. It corrupts its database on a fairly regular basis; it may be corrupted now and you just haven't noticed.

There are excellent free or cheap options in this space. There are two basic styles to choose from: centralized or distributed systems.

Centralized systems are what you're used to. There's a central server, and you check in and check out from there. You can't do source control operations unless you've got a connection to the server.

Centralized systems come in two sub-flavors: lock-edit-unlock and edit-merge-commit. Lock-edit-unlock is SourceSafe's default model - before you start editing, you lock the file in the repository. Nobody else can touch it until you're done. The up side is that nobody else can touch it until you're done. The down side is the inevitable "please check in the project file!" conversations.

Edit-merge-commit is a much saner workflow for most projects. You just start editing. If somebody else makes a change and checks in, you pull the changes from the source control system into your working copy. Generally, changes will just merge in automatically (changes to other files, or edits to other lines). If not, the tool helps you do the merge.

The 800-pound gorilla in this space is Subversion (http://subversion.apache.org). It's mature, stable, fully featured, and free. There's excellent Windows integration with TortoiseSVN (Windows explorer) and AnkhSVN (Visual Studio) plus other pay options. It defaults to edit-merge-commit, but does allow exclusive locks when needed for unmergable files (like binary bitmaps or MS Word docs or the like).

The other option is a distributed source control system. In these systems, there is no central repository. Instead, each user maintains their own repository and their own working copies. People collaborate by sending changesets to each other, or pulling from each other's repositories into theirs. It sounds complicated, but in practice it works really, really well.

The other nice thing about the distributed systems is that there's no server, so you don't have to install or manage or maintain one.

These days, if you're starting out I'd really recommend checking out one of the distributed systems. It may seem scary at first, but it really just works. And since you're talking solo projects at the moment anyway, it's not like you'll be distributing to anyone anyway.

There are three major players in the distributed source control space right now. They're all open source and free. In alphabetical order:

  • Bazaar: http://www.bazaar-vcs.org Concentrating on ease of use day to day. Still quite powerful. Windows is a first-class target. Written in pure Python. Created and used by Canonical for the Ubuntu linux distribution.

  • Git: http://git-scm.org This is the tool used by the Linux kernel team and lots of open source projects. It's... well lets say it's very powerful, and very quirky. Windows support for Git is done as a completely separate project; the main Git authors don't care about Windows in the slightest. Written in a combination of C, Perl, shell scripts, and who knows what else. :-)

  • Mercurial: http://www.selenic.com/mercuial An easy to use distributed sccs. Fast, powerful, and Windows is a primary target. Written in Python with a little C for speed boosts. Good Windows explorer integration available with the TortoiseHG project.

(I mention what they were written in because all three are extensible, and the language they're written in influences how you can write extensions.)

I've used all three. I started with Bazaar, switched to Mercurial, and use Git when I have to. Personal opinion, I like Mercurial best; I find it to be the best combination of speed, features and ease of use. However, all three are really, really good. As such, I'd recommend given them all a try. They're cheap, easy, and you can get a feel for them pretty quickly. Then pick the one that feels right. Each of the project sites has their "why our system is the best" page, so I'm not going to try and repeat them here.

Each of these three systems also has a public project hosting site. This is the best way to share your code with others if you want to. These sites also offer bug trackers, wikis, tracking of who's watching your code, and many other features. They are:

bitbucket and github are pretty much feature-identical, except for the underlying SCM. I haven't spent much time with launchpad so I can't say anything about it.

So, in the end, there's no one good answer here. They're all free, and anything (except SourceSafe :-) ) is better than what you're using now. Give any of them a try, you won't be sorry.

Chris Tavares
+1 balanced and complete (how dare thee? ;)
msw