gawkworkflow: Repo Copies

 
 2.2 How Git Stores Branches and Their Copies
 ============================================
 
 So how does Git work?(1)
 
    A repository consists of a collection of "branches".  Each branch
 represents the history of a collection of files and directories (a file
 "tree").  Each combined set of changes to this collection (files and
 directories added or deleted, and/or file contents changed) is termed a
 "commit".
 
    When you first create a local copy of a remote repository ("clone the
 repo"), Git copies all of the original repository's branches to your
 local system.  The original remote repository is referred to as being
 "upstream", and your local repo is "downstream" from it.  Git
 distinguishes branches from the upstream repo by prefixing their names
 
      +======================+
      |       Branches       |
      +======================+
      | master               |
      +----------------------+
      | gawk-4.1-stable      |
      +----------------------+
      | gawk-4.0-stable      |
      +----------------------+
      | feature/fix-comments |
      +----------------------+
      | ...                  |
      +----------------------+
 
 Figure 2.1: The Savannah 'gawk' Repository
 
    After you clone the repo, on your local system you will have a single
 branch named 'master' that's visible when you use 'git branch' to see
 your branches.
 
      $ git clone http://git.savannah.gnu.org/r/gawk.git  Clone the repo
      $ cd gawk                                           Change to local copy
      $ git branch                                        See branch information
      -| * master
 
 The current branch is always indicated with a leading asterisk ('*').
 
    Pictorially, the local repo looks like SeeFigure 2.2 your-repo.
 (you can ignore the 'T' column for the moment):
 
      +===+======================++=============================+
      | T |    Local Branches    ||      Remote Branches        |
      +===+======================++=============================+
      | X | master               || origin/master               |
      +---+----------------------++-----------------------------+
      |   |                      || origin/gawk-4.1-stable      |
      +---+----------------------++-----------------------------+
      |   |                      || origin/gawk-4.0-stable      |
      +---+----------------------++-----------------------------+
      |   |                      || origin/feature/fix-comments |
      +---+----------------------++-----------------------------+
      |   |                      || ...                         |
      +---+----------------------++-----------------------------+
 
 Figure 2.2: Your Local 'gawk' Repository
 
 Note that what is simply 'gawk-4.1-stable' in the upstream repo is now
 referred to as 'origin/gawk-4.1-stable'.  The 'origin/' branches are a
 snapshot of the state of the upstream repo.  This is how Git allows you
 to see what changes you've made with respect to the upstream repo,
 without having to actually communicate with the upstream repo over the
 Internet.  (When files are identical, Git is smart enough to not have
 two separate physical copies on your local disk.)
 
    If you're working on a simple bug fix or change, you can do so
 directly in your local 'master' branch.  You can then commit your
 changes, and if you have access rights, push them upstream to the
 Savannah repo.  (However, there is a process to follow.  Please read the
 rest of this Info file.)
 
    ---------- Footnotes ----------
 
    (1) The following description is greatly simplified.