git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Comments on "Understanding Version Control" by Eric S. Raymond

From
Jakub Narebski <jnareb@gmail.com>
Date
Feb 10, 2009, 01:20 UTC
Message-ID
<200902100220.07304.jnareb@gmail.com>
In-Reply-To
<200902021948.54700.jnareb@gmail.com>
On Mon, 2 Feb 2009, Jakub Narebski wrote:

UVC = "Understanding Version-Control Systems" (draft), http://www.catb.org/esr/writings/version-control/version-control.html

Show 29 quoted lines
> UVC> = What, if anything, have we learned from history? =
> UVC> 
> UVC> There's a folk saying that "It's not what you don't know that
> UVC> hurts you, it's what you think you know that ain't so." In
> UVC> examining the pattern of development of VCSes, it seems to me
> UVC> that the this sub-field of computer science has been less
> UVC> hampered than most by difficulties in finding appropriate
> UVC> techniques, but more hampered than most by wrong assumptions that
> UVC> hung on far longer than they should have. 
> UVC> 
> UVC> First wrong assumption: Conflict resolution by merging is
> UVC> intractably difficult, so we'll have to settle for locking. It
> UVC> took at least fifteen and arguably twenty years for VCS designers
> UVC> to get shut of that one. But it's historical now. 
> UVC> 
> UVC> Second wrong assumption: Change history representation as a
> UVC> snapshot sequence is perfectly dual to the representation as
> UVC> change/add/delete/rename sequences.. This folk theorem is well
> UVC> expressed in the 2004 essay "On Arch and Subversion"[3]. It is
> UVC> appealing, widely held, and dead wrong.
> UVC> 
> UVC> File renames break the apparent symmetry. The failure of
> UVC> snapshot-based models to correctly address this has caused
> UVC> endless design failures, subtle bugs, and user misery. 
> 
> It is not true.  Example of snapshot-based Git, which with its rename
> detection deals very well in practice with file renames contradict
> this theory.  Bazaar which is supposedly snapshot-based, yet support
> "container identities" ('file-ids') contradict this further.

Now after thinking about this a bit, I reckon that the second wrong assumption is not the fact that snapshots sequences representation are perfectly dual to changesets representation, because in practice (as in: merge doesn't have exponential time in history size) they are. It is not even assumption that renames are not important, or in other words not dealing correctly with renames and copies.

No, second wrong assumption (if we want to phrase knowledge from history of version control in this terms) is not realizing that it is _merging_ that has to be easy. Both to be able to do branching (stable, development; feature branches), and for collaboration: the distributed part of distributed version control systems (Linus' "network of trust"). And intelligent, rename-aware merge strategy is _necessary_ component for doing automated merge. Necessary, and very important, but only a _component_.

That is what Subversion, at least up to Subversion 1.5, got wrong. It made branching (or facsimile / cheap imitation of branching) easy, but it *didn't* made merging easy. Even in SVN 1.5 it is not, from what I understand, very easy.

Easy merging is extremely important for DVCS in OSS development, as usually centralized VCS with need for commit rights simply do not scale up to the sizes required by larger OSS projects, especially those with diverse developers.

P.S. By the way, the hgbook contains quite good description of DVCS; description of beginnings of Git can be found at GitHistory page on Git Wiki; you can find history of adding features and changing design and UI of Git in Junio C Hamano "Git Chronicles", presented at GitTogether'08.

-- 
Jakub Narebski
Poland
Previous: Jakub Narebski
Message 21 of 21 in “Comments on "Understanding Version Control" by Eric S. Raymond”
  1. Jakub NarebskiFeb 2, 2009
  2. Theodore TsoFeb 2, 2009
  3. Eric S. RaymondFeb 2, 2009
  4. Jakub NarebskiFeb 3, 2009
  5. Jakub NarebskiFeb 4, 2009
  6. Theodore TsoFeb 4, 2009
  7. Junio C HamanoFeb 5, 2009
  8. Theodore TsoFeb 5, 2009
  9. Junio C HamanoFeb 5, 2009
  10. Theodore TsoFeb 5, 2009
  11. Junio C HamanoFeb 5, 2009
  12. Jakub NarebskiFeb 5, 2009
  13. Theodore TsoFeb 5, 2009
  14. Miles BaderFeb 5, 2009
  15. Eric S. RaymondFeb 5, 2009
  16. Jakub NarebskiFeb 5, 2009
  17. Theodore TsoFeb 5, 2009
  18. Jakub NarebskiFeb 5, 2009
  19. Theodore TsoFeb 5, 2009
  20. Tests for "Understanding Version Control" by Eric S. RaymondJakub Narebski, Feb 4, 2009
  21. Jakub NarebskiFeb 10, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.