Intro to Distributed Version Control (Illustrated)

Hi Scott, that’s an interesting idea. You’re right, currently DVCS require a maintainer to pull, but there may be cool ways to automate the process.

[…] 不過世界總是在我們不知不覺中進步,版本控制系統目前的趨勢看起來會慢慢從集中式轉成分散式,從一些大型 open-source 專案紛紛轉用就可看出變化相當明顯。目前比較主流的分散式版本控制系統是 Git, Mercurial, 及 Bazaar 這三個,“Distributed Version Control Systems: A Not-So-Quick Guide Through” 對這三個系統做了相當深入的比較。 […]

Just delete this bit, it wrong.

“Centralized VCS emerged from the 1970s, when programmers had thin clients and admired “big iron” mainframes (how can you not like a machine with a then-gluttonous 8 bits to a byte?).”

Hi Preston, thanks for the comment. As far as I know, the first source control management systems did evolve in the 1970’s, if not earlier (http://en.wikipedia.org/wiki/History_of_software_configuration_management). The rest was meant to be taken tongue-in-cheek :).

[…] Most Ruby developers are familiar with Git by now. (If you’re not: it’s a distributed version control system that was created in 2005 by Linus Torvalds for Linux kernel development). Within the last year almost every Ruby-based open-source project has switched to Git (including Rails itself). And in fact they’re almost all hosted on Github! […]

That’s nice work, thank you guys.

That looks very useful, thanks.

Very impressive, nice article.

Thanks for the nice article Kalid!

Thanks AJ, glad you enjoyed it.

Development links for today…

News: Django goes 1.0!: Adrian Holovaty: Django, still amazing me after all these years Great introductions to concepts: BetterExplained: A…

I don’t see how this can possibly work. Yes, I know it works for the Linux kernel and some other projects – I just do not see how. With a central repository, all of the developers are basing their work on the same code, and everyone’s changes are incorporated, so that everyone has everyone else’s code. You keep things separate by branching and merging. It’s all straightforward. I don’t know why Torvalds has such hate for branching and merging – it’s really no big deal, in a central VCS.

But in this “distributed” system… if there are ten developers, every developer needs to individually merge the changes from the other ten? So instead of 10 merges, there are 100 merges, all being merged into different branches which may or may not be based on the same trunk code? To me, this looks like a nightmare.

Again: yes, I know, it works for some projects. I just don’t see how.

… unless, of course, you have one person who acts as the “maintainer”, whose repository becomes the de facto central repository. In which case, what is the point of all this extra added complexity?

I guess I just don’t get it.

Hi Scartis, great question. Regarding organization, you get a few benefits:

  • Choice of decentralized (default) or ‘centralized’ system (with a maintainer who pulls changes)
  • Very simple change management. Although branching/merging is “possible” in subversion, it’s difficult in practice because the system doesn’t keep track of the changes. So you don’t know if you’re applying the same patch twice.
  • Speed. Because it’s decentralized, you can make checkins/checkouts locally, which is very fast (no need to go over the network). In fact, you only need the network to sync so it works great in disconnected scenarios.

Personally, I’m happy with subversion for my projects (any VCS is better than nothing) but DVCS is a step above.

Thank you.

[…] Well, I’ve finally decided on my project for this open source course. I am happy to report that I will be working on Mercurial. For anyone that doesn’t know it is a Distributed Version Control Sytem (DVCS). Now if you are like me you’re probably wondering what in the world that is? Is it like subversion or CVS, if not then whats the difference? Let me explain… […]

[…] Intro to Distributed Version Control (Illustrated) | BetterExplained (tags: distributed vcs tutorial reference git Subversion versioncontrol dvcs scm mercurial) […]

Hi Kalid,

Thank you for such an impressive and informative article.
I have gone through your other article as well; that is also equally impressive.

Your articles have helped me in understanding basics SCM as well as DSCM.

Thanks once again.

[…] Intro to Distributed Version Control (Illustrated) | BetterExplained - "Traditional version control helps you backup, track and synchronize files. Distributed version control makes it easy to share changes. Done right, you can get the best of both worlds: simple merging and centralized releases." […]

@Scartaris: You’re welcome

@Akhil: Thanks for the comment, glad you enjoyed it!