title: What is a one-sentence explanation of how Accurev works?
body: <p>I understand git, Subversion, CVS and a myriad of other source control systems.</p>
  
  <p>I've begun using Accurev and it confounds me.</p>
  
  <p>I believe I need to form a mental model that relates it to other SCM's.  Ideally relative to git because I understand git the best.</p>
  
  <p>I would explain git as "a directed graph of commits where a commit is a diff, a parent (or parents) hash, and a hash of itself."  You can easily move on from there to explain concepts like rebase and what merges really are, fast-forward vs. actual merges and so on.  I've found it easy to teach new users complex git concepts in about 15-20 minutes.</p>
  
  <p>I would really like to understand Accurev at that level.  So...</p>
  
  <p><strong>What is the once sentence abstraction of how Accurev works that makes it possible to explain how it behaves?</strong></p>
  
  <p>Some examples of questions I would like my mental model to answer:</p>
  
  <ul>
  <li>What happens when I "keep" some files and then "promote" them?</li>
  <li>What if I don't promote the same files as I've just kept?</li>
  <li>Why does history sometimes get mis-attributed when non-conflicting (a.k.a. overlapping) updates happen?  This, in particular, is reminiscent of a failure mode of Subversion that, from the basic explanations I've heard, I don't believe should exist with Accurev.</li>
  <li>Why do diffs almost never contain what I expect them to?  I believe what's happen is that diff against basis is showing me the diff against the current (moving) parent stream but what I really want is only to see changes I've made since I've last updated.</li>
  </ul>