Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What are the internal structural differences between distributed (e.g Git & Mercurial) and non distributed (Subversion) version control?

The question came from a discussion group where a tool was interacting with CVS and it was argued whether it would be easily ported to other systems or not.

share|improve this question
There is a nice introduction to Mercurial by Joel Spolsky, check out the Subversion Re-education chapter. – PersonalNexus Feb 13 '12 at 19:28
What do you mean by internal structural difference? – Karl Bielefeldt Feb 13 '12 at 19:29
Don't you just love Wikipedia – Dynamic Feb 17 '12 at 22:37

Main internal structural differences I can think of:

  1. On distributed you get all the previous versions with each pull/get
  2. On distributed you don't have to phone home when you are about to start editing a file.
  3. On distributed you will have to have all the functionalities of merging, checking in, etc, because each instance is a full-featured repository

As far as a client goes, a non distributed source control client would be ok if it could do the basic tasks of: getting a specific version, phoning in to tell that you are working on a file, and sending back the changes after looking/resolving any conflicts

share|improve this answer
There are non-distributed VCSs that don't have to phone home when you start to edit, such as CVS and SVN. – David Thornley Feb 13 '12 at 22:25
You mean it's not the default, sure, but a client has to have the function. – Mihalis Bagos Feb 17 '12 at 16:27
Why? Here, I've got the parts of the codebase I need checked out from Subversion. When I want to edit a file, I do so. When I think it desirable, I merge in changes from the repository, and I do that regardless of what's changed. The only time I communicate with the repository that's related to editing files is when I check them in. – David Thornley Feb 17 '12 at 17:53
Again, a client has to have the function. It's not really a centralized repository unless you can lock the file you are working on. On svn it is optional, but it's there, and if you prefer to work decentralized, you better use a system that is decentralized. – Mihalis Bagos Feb 17 '12 at 18:57
I am completely failing to understand. There is one SVN repository here at work, so it has to count as centralized. If it were distributed, there'd be repositories all over (that weren't backups or mirrors). If the lock functionality was removed, it wouldn't affect where I work in the least. Therefore, a SVN-- without locking would be very useful, and I don't see how it would be anything but centralized. – David Thornley Feb 17 '12 at 19:41

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.