Re: Google Summer of Code

Thomas Lord <[email protected]>
Newsgroups gmane.comp.version-control.arch.user
Message-ID <[email protected]>
Stephen J. Turnbull wrote:
 > [....]

I think you are close to right on a few things but not quite right overall.

Git is very fast at many operations partly because its storage management
is "snapshot oriented": there is no need to compute a tree-delta at commit
time.

Git is also very fast because it's storage is (roughly speaking) a 
revision library
sans hard-links:  there is no need to apply tree-deltas to reconstruct a 
historic
revision.

If you scour the history of discussions you will see that, long before 
git came
along, we contemplated that for GNU Arch in the form of "commit directly
to revision library," and "compressed revision libraries sans hard links".
We underestimated the value of those features and didn't make them a 
priority.

Git is also very fast because it uses, in essence, "names based inventory".
Being in love with fancy merging, we never took names based inventory
very seriously and didn't put much work into it.   If we had, tree-lint 
during
commit would have been 0-cost for names based trees and we could have
easily supported git's style of partial commits (for names based trees).
We got stuck on the question "Why would anyone want to do *that*?!?"

You contrast git with arch by pointing out that git reconstructs 
(intrinsic) history
from trees.   Um.  So does arch.   Arch *additionally* adds a structured
namespace to record intentional history but so what: that's just an 
extra feature.

You point out that git emphasizes "seat of the pants" merging.  Arch has 
long
had tree-delta and user-specified three-way merges.   In general, at 
least for
names method trees, there is no git merge technique that does not make 
perfectly
good sense for Arch, too.   If we had taken names method more seriously, we
might have arrived at hybrid techniques:  approximate-inventory-computed-
-from-content-summaries or approximate-inventory-using-implicit-method-
-on-trees-that-might-not-lint-cleanly.

Contentment with the storage model and disinterest in names method are the
main reason Arch wasn't ready to swoop in when the BitKeeper license was
withdrawn.  In some sense, that's my fault for not paying more attention to
Linus' stated need for speed and stated interest in names-based inventory.

All of this ads up to why I think Arch still has potential relevance.  You
mention yourself that you really appreciate Arch's merge logic.   It's 
possible
to have a smoother mix of the best of both worlds.   (Arch is also still 
relevant
compared to git because of integrity issues.)

-t

> Sorry to say, but after trying git pretty seriously, I don't think you
> had a shot.  I'm not sure I can put my finger on it, but I'll give it
> a try.
>
> Arch, like Darcs, is patch-oriented.  It's also history-oriented.
> This is inherently a bottleneck in any merge-oriented process, because
> when you hit a conflict, it pertains to a given patch in some order.
> A patch-oriented SCM needs to stop there to avoid horking things even
> worse.  Darcs tries to get around this with "patch theory," but there
> are some things (eg, files with "hot spots," like ChangeLogs), that
> Darcs doesn't handle any better than anything else.  And its algebraic
> manipulation of the patch chain also has bad algorithmic properties,
> sometimes I think it's exp-exp. ;-)
>
> git, on the other hand, is snapshot-oriented, with an efficient
> representation of the snapshots.  A patch is defined as the diff of
> two snapshots.  It is no better than Arch or Darcs at avoiding
> conflicts, of course, probably substantially worse, in fact.  In my
> limited experience with all three, what it does substantially better
> than either, though, is two things.  (1) Since you "teleport" directly
> from here to there, *all* of the conflicts show up in one shot, giving
> the manager a better shot at deciding whether the merge is feasible,
> or if he needs to go to "Plan B."  (2) It's much easier (again in my
> limited experience) to figure out what "Plan B" is.
>
> Regarding performance, I'm not using git across a network, except to
> occasionally update git itself.  However, local operations all seem to
> be basically O(diffsize).  Commits are usually instantaneous, diffs
> seem to go about as fast as the output device can handle, etc.  I
> tried some experiments with micro-branching in arch; they ran into a
> performance bottleneck pretty quickly.  Branches in git are plenty
> lightweight for micro-branching (which git people call "topic
> branches").  They're easy to make, they're easy to commit to, and
> they're fast enough to switch back and forth in a single workspace for
> many of my purposes.  I *never* would have tried that in Arch, but
> even on the abysmally performing Mac file system, it's very doable in
> git.
>
> The other thing that I like about git is that it constructs history
> from a tree of objects, it doesn't store it centrally.  This means
> that you can back-build a repository fairly easily.  This is important
> to me because I'm transitioning from a badly broken CVS repository and
> want to untwist the history.
>
> Do you care?  I don't know.  Good performance on simple operations is
> always nice, but might not be the sine qua non if you can get superior
> merge capability.  The success of various cvs2* scripts show that most
> CVS repositories aren't as broken as XEmacs's.
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.