I first started using version control about a year ago on the recommendation of a friend (and the rest of the internet). Until than, I had not really been exposed to it. I thought, "Why do I need it? I am only developing on one machine and I am the only one working on it." Of course, once I started using version control, I could not figure out why I was not using it before. It seemed so amazing and magical. Working with other people became feasible. Backup became a routine part of development. Most importantly, for a solo developer anyway, documentation became a part of the development routine. Additionally, I was forced to do things in chunks that made logical sense so that I could commit them in a chunk that made sense to put together. It was also nice to be told in Software Engineering class to use a version control system and already know how to use one.
When I initially started using version control, of course, I asked myself, "Which VCS is right for me?" I started out using Mercurial and am currently using Git. Both of them are very good. I like Mercurial's slightly better, but on the other hand, Git does branching in a way that makes more sense to me. When researching this question, however, I partly looked into the hosting opportunities that were afforded to each VCS. It was the opinion of many students on campus and in the CWRU Hacker Society that GitHub was one of God's gifts to mankind and that anyone not using was a fool and was against open source software. That turned me off somewhat and at the time I was interested in doing some coding that was not open source, so I initially decided to host my code on BitBucket, who offered unlimited free, private repositories (although there is a limit of 4 other contributors across all over your repositories).
My initial experience with BitBucket was positive. There was good start up documentation and Mercurial seemed to be very user friendly. In no time I was looking over my commits, viewing old code, and refactoring a lot. Additionally, BitBucket offers unlimited contributors to your private repositories if you are a student, which I consider to be a huge boon to Computer Science students and aspiring entrepreneurs. The problem with BitBucket came into focus for me when I started digging into their documentation a bit further and using some of their project management tools. The documentation wiki had quite a number of pages that had not been updated to reflect important changes. The lack of static site hosting on a per-project basis made it harder to use as a hosting service for a project since possibly the most important face of the project had to be hosted elsewhere. Additionally, I found its project management tools to be somewhat lacking. The wiki syntax was easy enough (and is apparently a somewhat used standard), but your ability to organize the wiki online was suboptimal. All of the pages were stored in the same directory and there was no obvious way to put them into some type of folder structure.
The other problem I had with BitBucket was its issue tracker. I like to use issues to keep track of feature requests, to dos, and possible ideas in addition to bugs. While BitBucket allows you to tag issues as all of these things, it does not allow you to group them or do much sorting (other than by priority, which is done relatively and therefore not useful until you know all of the issues that might come up) other than using its query system, which is very slow, both to use and to function. What I wanted was a feature like GitHub's milestones, allowing issues to be grouped together in a defined manner.
For these reasons, I started putting all of my code on GitHub. Once I did that, I also learned that there existed a git-hg bridge to allow hosting mercurial repositories on GitHub by translating between git and hg between the remote server and the local computer. While I was glad to know that GitHub supported mercurial repositories, I had started doing all of my development on Linux and so I was perfectly happy with git. For what I was using it for, it worked pretty much identically (I don't do too much branching). There have been several other consequences of this change. Since all of the people I know are using it to store their code, I can easily follow what they are working on and take a look at the code of their projects. Since a lot of them are now working in industry, there are a lot of things that I can learn from looking at their code, but it is not entirely unreadable. The other result of switching is that I now have more of a portfolio to show off to potential employers, which, being that I am looking for employment in the near future, is definitely a benefit.