To give a brief overview of source control system, there are 2 basic types of source control system - distributed and centralised. The key difference between these is that centralised systems hold the source code in one central place, whereas with distributed systems developers have their own local repository to push changes to before committing them to one (or many) centrally hosted repositories.
The distributed systems provide benefits around frequency of commits and impact on others using the repository. You are encouraged to commit more regularly as you are not affecting others with your changes until they are pushed to the central repository. This makes it easier for the source code merging tools to reconcile the changes over time. Examples of distributed systems include Git and Mercurial.
I would always recommend using distributed source control over centralised due to the merging experience that both provide. Microsoft have modelled the merging behaviour of TFS 2012 on Git as they have themselves realised the superiority Git has in this regard. If you wish to go down the distributed route, and given that you have a distributed team then I would definitely recommend it, then there are a couple of VS extensions that you can install to help with this: Visual Studio tools for Git and Git Source Control provider.
You can then use one of the cloud hosting providers to act as your central repository host. The 2 main players are GitHub and Bitbucket, the main difference between the 2 being cost for non-open source projects. Bitbucket is free for small teams (up to 5 users I believe and unlimited repositories) and can host private closed source repositories whereas GitHub is only free if your source code is open source. If you wish to host private repositories on GitHub you will need a paid plan.
The basic workflow for a distributed source control repository is (I'm not including any Continuous Integration steps here, this is just for source code management):
- Developer pulls code from central repository to local repository on their local machine.
- Developer makes required changes, commits regularly to local repository
- When developer has enough functionality to push centrally, they pull any changes from the central repository and merge with their local
- Developer pushes changes from local repository to central repository
You can also go a step further if your project is a Microsoft .Net website (you didn't mention specifics in your question but this is useful for anyone developing .Net websites) and use either AppHarbor or Azure Websites to host the website, because both allow for continuous deployment hooks directly into Bitbucket or GitHub, meaning that you can push your changes to Bitbucket and have AppHarbor/Azure automatically deploy the website after a minute or 2.
The workflow then becomes:
- Developer pulls code from central repository to local repository on their local machine.
- Developer makes required changes, commits regularly to local repository
- When developer has enough functionality to push centrally, they pull any changes from the central repository and merge with their local
- Developer pushes changes from local repository to central repository
- AppHarbor/Azure detects that changes have happened within the repository and deploys the website