This is the first concept you have to understand and one that makes it so different from VSS and older version control systems (VCS). Git repos are always local. When you are ready, you can merge your work into a GitHub/Bitbucket repo or even someone elseâs repo on their machine. But, even after you merge/push your changes you are still working on a separate local repo. Thatâs why there is not concept of âchecking outâ (locking) a file in Git as there are in other systems. Anyone can modify any file at any time. You just might have to help with the merge later if the changes conflict with changes that someone else made. In fact, you can create Git repos locally without ever creating a GitHub or Bitbucket account. There is no dependency there.
If you havenât already, Iâd recommend you work through this fun little Git tutorial.
VS2013 with GitHub extension doesnât look too awful, although I have no experience of anything else. The MSDN articles look like they cover a good bit of ground too.
I used it with VS2012, and it was a bit irritating, when you are used to use the TFS integration.
As far as I know the GIT plugin was a bit optimized in 2013.
And if you are not used to something else, it even might make sense
I guess the biggest difference between TFS and GIT is, that in TFS you check out single files for editing (which does not lock them for others) and then check them in when your done (or merge first, if someone else modified it).
In GIT you pull a whole branch, modify it, and then you merge your changes back.
Even that you could work file wise with GIT too, it makes it more complicated.
In TFS I always see, who is working an a specific file. In GIT you have no idea who has pulled the repo, and you can not know on what files others are working.
Older VCS systems (and TFS can work like this) use a lock-modify-unlock paradigm, where modern systems (and TFS can work like this too) use a copy-modify-merge paradigm. The disadvantages of the older system is that only one person can work on a specific file. That, and some systems (TFS included, at least in older versions) only allowed you to have one âworking copyâ, because the server kept track of where on disk the client was working.
Modern systems have solved the merging problem (Git especially, it tends to be very smart with merges), and so donât need to lock (or indeed, notify the âserverâ at all) before they edit a file.
One nice thing about Git, vs (for example) Subversion, is that if you start working on a file, and someone else has worked on it, you donât have to ârebaseâ before you can commit. You go ahead and commit, and then you either rebase or merge when you push. That way, your local changes are never in danger, and are never in limbo between when you made them and when theyâre safely stored in the system.
If you like the TFS project system (work items, bug tracking, etc), then you can use Git repositories with it, and have the best of both worlds. Personally, I like GitLab better, but itâs a personal preference thing at that point. Either way, though, I recommend Git repositories.