\section{Revision Control Systems}

\begin{frame}
   {Why Use Revision Control Systems?}

   \begin{itemize}

      \item
      Project complexity grows with size and number of
      contributors, users, and testers

      \item
      \textbf{Revision Control Systems} (\textbf{Version
         Control Systems}):
      \begin{itemize}
         \item
         Keep accurate history (log) of changes
         \item
         Can back up to earlier releases
         \item
         Can resolve conflicting contributions
      \end{itemize}
      \item
      Many methods in use
   \end{itemize}

\end{frame}

\cprotect\note{

   Software projects become more complex to manage as the
   size of the project increases, or as the number of
   developers working on them goes up.

   In order to organize updates and facilitate cooperation,
   many different schemes are available for source control.
   Standard features of such programs included the ability
   to keep an accurate history, or log, of changes, be able
   to back up to earlier releases, coordinate possibly
   conflicting updates from more than one developer, etc.

   \textbf{Source Control Systems} (or \textbf{Revision
      Control Systems}, as they are also commonly called)
   fill the role of coordinating cooperative development.

}

\section{Available Source Control Systems}
\begin{frame}
   {Available Source Control Systems}

   \input{revtable}

\end{frame}

\cprotect\note {

   There is no shortage of available products, both
   proprietary and open; Above is a brief list of products
   released under a \textbf{GPL} license.

   We will focus only on \textbf{git}, a widely used
   product which arose from the \textbf{Linux} kernel
   development community.  \textbf{git} has risen to a
   dominant position in use for open source projects in a
   remarkably short time, and is often used even in closed
   source environments }


\section{The Linux Kernel and git}
\begin{frame}
   {The Linux Kernel and git}

   \begin{itemize}

      \item
      The \textbf{Linux} kernel development system has special
      needs:
      \begin{itemize}
         \item Widely distributed throughout the world
         \item Thousands of developers
         \item Very public, under \textbf{GPL} license
      \end{itemize}

      \item \textbf{git} arose to satisfy those needs and has
      helped \textbf{Linux} to grow efficiently
   \end{itemize}

\end{frame}

\cprotect\note{

   The \textbf{Linux} kernel development system has special
   needs in that it is widely distributed throughout the
   world, with literally thousands of developers involved.
   Furthermore it is all done very publicly, under the
   \textbf{GPL} license.

   For a long time there was no real source revision
   control system. Then major kernel developers went over
   to the use of \textbf{BitKeeper} (see
   \url{https://www.bitkeeper.com}), a
   commercial project which granted a restricted use license for
   \textbf{Linux} kernel development.

   However in a very public dispute over licensing
   restrictions in the spring of 2005, the free use of
   \textbf{BitKeeper} became unavailable for \textbf{Linux}
   kernel development.

   The response was the development of \textbf{git}, whose
   original author is Linus Torvalds. The source code for
   \textbf{git} can be obtained from
   \url{https://www.kernel.org/pub/software/scm/git/}, and
   full documentation can be found at
   \url{https://www.kernel.org/pub/software/scm/git/docs/}.

}


\begin{frame}
   {How git Works}
   \begin{itemize}
      \item Not a traditional version controls system
      \item Does not work with \textbf{files} as basic unit
      \item The \textbf{Object Database} contains:
      \begin{itemize}
         \item \textbf{Blobs}
         \item \textbf{Trees}
         \item \textbf{Commits}
      \end{itemize}
      \item The \textbf{Directory Cache} captures state of the
      directory tree.
      \item
      Has graphical interfaces
      \item
      Sites such as \textbf{github} have millions of
      \textbf{git} repositories
   \end{itemize}

\end{frame}

\cprotect\note {


   Technically \textbf{git} is \textbf{not} a source
   control management system in the usual sense, and the
   basic units it works with are not files. It has two
   important data structures: an \textbf{object} database
   and a directory cache.

   The object database contains objects of three varieties:

   \begin{itemize}
      \item

      \textbf{Blobs:} Chunks of binary data containing file
      contents.

      \item

      \textbf{Trees:} Sets of blobs including file names and
      attributes, giving the directory structure.

      \item

      \textbf{Commits:} Changesets describing tree
      snapshots.

   \end{itemize}

   The directory cache captures the state of the directory
   tree.

   By liberating the controls system from a file by file
   based system, one is better able to handle changesets
   which involve many files.

   \textbf{git} is always under rapid development and
   graphical interfaces to it are also under speedy
   construction. For example, see
   \url{https://www.kernel.org/git/}. One can easily browse
   particular changes as well as source trees.

   Sites such as \url{https://www.github.com} now host
   literally millions of \textbf{git} repositories, both
   public and private.  There are a host of easy to find
   articles, books, online tutorials, etc. on how to
   profitably use \textbf{git}.

}

