Hi Heiner,

I've checked this one out. Seems to be a consequence of the hg developers decision to only ever append to a "revlog" (hg's basic storage unit) and some other design decisions, Makes the storage quite stable I assume at the cost of space inefficiency. A pity I think.

the decision to only 'append' to revlog is not the reason.

I've already discussed this with the Mercurial guru's 2 years ago and the outcome was that for each move, a new revlog is created with at least one full revision and a backpointer to the original location of the file. Somebody supposed they wanted to save some disk seeks (by avoiding looking at the older different history file which would be necessary in order to process deltas when they did not have that initial full revision).

The Mercurial Guru's believe in "disk space is cheap".

In my mind this is the one major point where Mercurial went the wrong way, and it leads to more problems.

Not being an official tester, I didn't know you were collecting Mercurial feedback for a report, so the following did not make it into that report:

Mercurial lacks support for cheap inline feature branching and you always have to clone the whole repo (note that I do not mean 'named branches' in a single repo which Mercurial supports because those cannot be removed from history anymore and they also would be pushed if you push from the repo).

This costs tons of additional disk space and CPU time because you have to rebuild everything from the ground up (object files, executables, libraries etc.) as a feature branch (you call it CWS) always means a separate new directory tree in Mercurial.

With Git you can switch from one branch to another one and - provided your makefile dependencies are correctly setup - you just need to recompile and relink the affected parts (because all changed files get current date on the switch of branches), in other words you don't need the generated object files, libraries and so forth n-times (though you can have it seperately as in Mercurial, if you really wish).

Even the repo history must be duplicated in Mercurial if the clone is not to be placed on the same physical filesystem because the hardlinks don't work in this case (which requires n times the storage).

Furthermore you would possibly need multiple repository clones to keep track of several remote branches in Mercurial.

With Git you can follow multiple remote branches in just one repo, you can setup cheap branches which can be completely removed from history (when everything is integrated upstream) and you can have one base-repo somewhere in your filesystem and multiple clones elsewhere which just reference the base repo without copying it.

Regards

Guido

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to