For a long time, everyone used CVS (Concurrent Versioning System). It was OK but had a lot of problems that would crop up when doing a lot of development. We got bit by the 'assume everthing is ascii' and 'all changes must be committed.' Also, there can only be one repository and if you lose the repository you lose all the historical data so the repository has to be taken care of and you have to be able to reach it if doing any commits (annoying if the CVS repo is on another site and say you dont have network connectivity or the site is down.)
We also used SVN for a brief time (but not enough to really have a strong opinion of it).
But then came along git and we really liked it. Three great things about it is that, first, you can commit and push to the repository as two seperate procedures. Second, git repositories are distributed, which means that every client has all the same data as the repository. So lets say your repository goes down or is deleted or lost, you can just make one of the clients into a repository. Third, you can rename and move files.
Anyways, so now we have a non-crappy RCS, hooray! But then to make it one better, github comes along!
github does everything and does it great. We have a paid account so we can keep repositories private while they're being worked on. But many people can probably get away with a free account! The thing that really made it an easy decision is knowing that if we want, we can take the local copy of the repository and move it elsewhere so it's a riskless situtation.
People can fork, edit and send pull requests (updates) very easily. We get one pull request a week of people with fixes and mods. It's a hell of a lot easier than dealing with emailed diffs. For example, here yvest fixed a missing function in our Nokia 5110 library. They forked the repository, made changes, tested and then sent us a pull request. After looking at the code we can press a button to merge it directly (or we can test it before pulling).