Some differences between Distributed Version Control Systems (DVCS) and Centralised Version Control Systems (CVCS)
The central server dilemma
I hear a number of people being fearful about what they hear about DVCS not having a central repository.
In most cases this is not entirely true.
There are a number of DVCS models that work very well utilising one or more central servers.
In fact all the DVCS I’ve worked with or set-up have used one or more central repositories.
One of the key differences between Distributed and Centralised.
Is with distributed, the authoritative or central source is the source you want it to be, rather than being constrained by the system into having to have your source in one place.
There has been occasions where we have had to use one of the developers local repositories when the central server has been down.
This is simply making a decision that the entire team is aware of, that you are going to push / pull to / from an alternative repository.
Hg has it’s own inbuilt web server, so this is very easy to do.
One of the big advantages with a DVCS is the flexibility.
With increased flexibility and power, comes the increased likelihood of someone screwing something up.
Personally I’d much rather have the extra flexibility.
Branching Merging
Is easy and encouraged in DVCS.
DVCS are designed with branching and merging to be a common task.
Therefore they do it well, and some of the paranoia around this concept is no longer justified when you go distributed.
Mercurial (Hg) vs Git commits
Both Hg and Git are distributed.
Git has this extra step between your working directory and your repository called the Index (strangely enough)
All changes in git go into a staging area, then into your repository.
The index is used to combine a set of changes that you want to commit as one operation.
When you commit, what is committed is the contents of your index rather than your working directory.
The idea of the index, is that some of the history is erased once a commit is made, as multiple changes and their details are wrapped into a single commit.
There is a philosophical debate as to which way is better.
Is it better to have every change recorded, or is it better to have a bunch of changes wrapped into an atomic change, so that some detail is negated.
I’m kind of on the fence about this one, as I think there are pros and cons for both arguments.
Interfacing with Hg and Git for Windows users
There are currently several options here.
command line
file explorer
- TortoiseHg
- TortoiseGit
- GitExtensions for Explorer and Visual Studio integration
For Visual Studio users
Tags: distributed version control, hg, mercurial
March 2, 2012 at 11:21 |
Non-mergeable file is a nightmare for dvcs, and large binary file is another big problem of dvcs also.
March 11, 2012 at 20:21 |
Yeah, we have a user story in the product backlog at work to deal with these issues.
I’ve looked at a couple of extensions for Mercurial.
Bfiles
BigFiles
Both have their issues.
Bfiles has issues with TortoiseHg.
BigFiles has issues with TortoiseHg, but not quite as bad.
I even considered using NuGet to package sets of binaries up.
The option we decided to go with, or at least it’s looking that way, is an implementation of the repository pattern on a service.
I’ve done one of these before and it worked out well.
Patterns in Action from the GoF guys has a good example.
March 2, 2013 at 13:01 |
[…] Distributed Version Control Systems vs Centralised Version Control Systems part 1 […]