You know, ironically, one of the most highly respect C++ library sets around (Boost) uses SVN. Although most do not like it... Speaking of which, most don't like how it's built or how anything surrounding boost works.
Tell that to Linus Torvalds who basically only used emails, tarballs, and diff/patch to develop the Linux kernel for many years before switching to Bitkeeper. At a talk at Google he said he would prefer going back to that than ever using CVS or Subversion ever again, and I tend to agree with him. Using Subversion has caused nothing but headaches for me in every single project I have ever worked on that has used it -- and I do understand how to use it; it's just a very very bad tool. I would rather use nothing than touch SVN/CVS, hell even Perforce or Team Foundation Server, ever again. Luckily, Git and Mercurial exist.
I've been monitoring this thread because I'm interested and want to implement some single-user version-control at home on my new Linux box for the revision history.
While I don't really have much experience with anything else, Tortoise SVN is working great at my company with 30+ developers on the same project. I don't understand the hate here. I also can't imagine it being any more streamlined.
Here's our process:
1. Check-out the repository from the central server (our automated nightly build machines to fresh checkouts every night). Update once a day (or more).
3. Check in your changes once you've tested your change.
As for features:
- I use Commit-monitor to instantly see what people have committed and whether I should update.
- I always keep my tree green (I don't keep local changes for extended periods). Tortoise overlays icons so I can easily see what is per repository, what's local, and what's conflicted.
- If someone has been working on the same file, an update will automatically merge it.
- I can see differences from each revision to find where a bug was introduced.
- I can "blame" the file which will give me the latest revision number, name of author, and commit comments for each line of code in a file.
- I can manually review changes from a merge and take action if required.
- If I update and someone else was working on the same line of code, It throws a conflict which I can resolve locally and then check-in when everything is good.
What does Git do that isn't listed? What's missing in this process? If there's an applicable advantage to Git over my familiar SVN, then I'm happy to make the switch at home but I haven't heard anything concrete here other than: it's very bad, SVN sucks, Linus doesn't use it so it can't be any good.
The only times I have troubles is if I am making a major change to every file in the repository. In that event, I can lock the repository to prevent the repository from constantly changing.
I could maybe see the SVN limitation if everyone is working on all files at the same time all of the time, but since this is an organized company and not just a group of non-communicating, unorganized FOSS developers, everyone has their own areas and maintains their own files for the most part.
I think he does address the differences between git and svn.
What does Git do that isn't listed? What's missing in this process?
I think all that you list is done perfectly by svn (I am an svn user myself). Although your team is huge by my standards, let me note that it is tiny by Torvalds': I think git was designed to (and does in practice) handle teams of 1k+ developers.
a group of non-communicating, unorganized FOSS developers
Stewbond, have you ever tried branching/tagging/merging with SVN? That's where the real power of Git is. These tasks are an absolute nightmare with SVN (well, most centralized systems I've tried in general), but smooth as silk with distributed systems like Git and Mercurial. For example, if you've ever wanted to develop a new feature alongside mainline development and integrate the changes at a later date when the new feature is ready, with SVN it's very difficult but Git makes it extremely easy using Git's efficient branching and merging operations. Other version control operations are also extremely quick with Git because it never touches the network unless you are pushing/pulling changes between developers -- everything in SVN is dog slow in comparison because it's bottlenecked by the network connection.
Have you ever tried updating your tree with changes from 1000+ files at once with SVN? It takes a damn long time, but with Git it's practically instant. God forbid the system that is hosting your SVN repository dies, say goodbye to your entire project history -- hopefully someone has an up-to-date tree to start again from scratch...but with Git everyone has the entire history of the project on their own machine so there is no single-point-of-failure *ever*.
The benefits of distributed systems over centralized systems are numerous. I could go on and on and on about it.