title: Terminology used by Git
body: <p>it seems like I have to learn to use git. Which probably is a good thing (TM).
  However reading online guides and man-pages, I just cannot get my head around the terminology. Everything is always defined in terms of themselves or other unexplained terms (do a "man git" and you see what I mean).</p>
  
  <p>So, is there a more DAG-alike structure of definitions of terms, including some of the following (all taken from the git man page(s)!). Maybe using a file system as a starting point, and not assuming the reader is well versed in svn (which I am not).</p>
  
  <ul>
  <li>repo</li>
  <li>repository</li>
  <li>a git</li>
  <li>"the git"</li>
  <li>index</li>
  <li>clone</li>
  <li>commit</li>
  <li>branch</li>
  <li>tree</li>
  <li>upstream</li>
  <li>a head</li>
  <li>HEAD</li>
  <li>version</li>
  <li>tag</li>
  <li>archive</li>
  <li>patch</li>
  <li>submission</li>
  <li>changeset</li>
  <li>stash</li>
  <li>archive</li>
  <li>object</li>
  <li>module</li>
  <li>submodule</li>
  <li>refspec</li>
  <li>a history</li>
  </ul>
  
  <p>While I can find explanations for some, they usually are in terms of the other. Also some others terms I do know from other contexts (like a UNIX diff). However some other I thought I knew...</p>
  
  <p>I have gathered that there are repositories (similar to gits? and/or trees? upstream?), which you copy (clone? branch?) to get the files physically to your hard drive. Then there are branches (similar to changesets?), tags and commits (similar to patches?), but their distinction is not clear. What files do what modify? What makes my files stay local and what might (heaven forbid) submit my code to teh internets?</p>
  
  <p>What is the recommended way to work, when it comes to branches, tags and commits -- so it is easy to swap between versions, and to import updates from publically available gits.</p>
  
  <p>//T, biting his tongue to control his frustration...</p>