\documentclass[pdf]{prosper}
\usepackage[toc,highlight,clifford,notes,hlsections]{HA-prosper}

\usepackage{svn}
\SVNdate $Date: 2006-05-30 23:00:00 +0200 (Tue, 30 May 2006) $

\title{The Subversion Version Control System}
\subtitle{An introduction for new users}
\author{Clifford Wolf\\
\institution{ROCK Linux - \href{http://www.rocklinux.org/}{http://www.rocklinux.org/}}\\
\institution{Csync2 - \href{http://oss.linbit.com/csync2/}{http://oss.linbit.com/csync2/}}\\
\institution{SPL - \href{http://www.clifford.at/}{http://www.clifford.at/}}}

\DefaultTransition{Wipe}
\TitleSlideNav{FullScreen}
\NormalSlideNav{ShowBookmarks}
\LeftFoot{\href{http://www.clifford.at}{Clifford Wolf}, \today}
\RightFoot{\href{http://www.rocklinux.org/submaster.html}{SubMaster}}

\begin{document}

\maketitle

% ============================================================================

\tsectionandpart{Introduction}

\begin{slide}{What is Subversion (1)}
\begin{itemize}

\item Subversion is a a version control system

\vspace*{.5cm}
\item The entire history of a project including all branches is stored in a
Database called Subversion Repository

\vspace*{.5cm}
\item A Subversion Repository can also be seen as a filesystem with special
capabilities

\vspace*{.5cm}
\item Pleople can check out files or directories from a Subversion Repository,
change them and commit the changes back to the repository

\vspace*{.5cm}
\item Some changes can be done directly on the repository without creating
a working copy

\end{itemize}
\end{slide}

\begin{slide}{What is Subversion (2)}
\begin{itemize}

\item Subversion Repositories can be accessed thru the filesystem,
using HTTP/WebDAV or by a special SVN:// protocol

\vspace*{.5cm}
\item The tool for creating and maintaining the database behind a Subversion
Repository is called 'svnadmin'

\vspace*{.5cm}
\item The tool for working with the Subversion Repository and Working copies
is called 'svn'

\vspace*{.5cm}
\item The calling convention for 'svn' is simmilar to the calling convention
for 'cvs'

\end{itemize}
\end{slide}

% ============================================================================

\tsectionandpart{Using Subversion}

\begin{slide}{Creating a repository}
\begin{itemize}

\item Creating the repository itself is easy: \\
{\tt svnadmin create /home/svn/repos}

\vspace*{.5cm}
\item If the repository should be accessable thru HTTP/WebDAV (http://), you
need to configure your apache to load the Subversion module and set it up.

\vspace*{.5cm}
\item If the repository should be accessable thru the Subversion
protocol (svn://), you need to set up the Subversion server {\tt svnserve}.

\end{itemize}
\end{slide}

\begin{slide}{Creating a working copy}
\begin{itemize}

\item Using the tool {\tt svn} is very simmilar to using {\tt cvs}.

\vspace*{.5cm}
\item A Working copy can be created with: \\
{\tt svn co file:///home/svn/repos localdir} \\
{\tt cd localdir}

\vspace*{.5cm}
\item Note that no equivalent to \$CVSROOT exists.

\vspace*{.5cm}
\item Within the working copy, every directory has a {\tt .svn} subdirectory
containing the Subversion metadata.

\end{itemize}
\end{slide}

\begin{slide}{Making changes (1)}
\begin{itemize}

\item Modifying files:
\begin{itemize}
\item Just edit them as usual with your favorite editor
\item Note that Subversion is using binary deltas and has
good support for non-ascii files
\end{itemize}

\vspace*{.5cm}
\item Adding files:
\begin{itemize}
\item First create the new file as usual
\item Then execute {\tt svn add {\it filename}}
\end{itemize}

\vspace*{.5cm}
\item Removing files:
\begin{itemize}
\item Just execute {\tt svn rm {\it filename}}
\item The file will automatically removed by {\tt svn}
\end{itemize}

\end{itemize}
\end{slide}

\begin{slide}{Making changes (2)}
\begin{itemize}

\item Moving/renaming files:
\begin{itemize}
\item Using {\tt svn mv} instead of {\tt mv}
\end{itemize}

\vspace*{.5cm}
\item Copying files:
\begin{itemize}
\item Using {\tt svn cp} instead of {\tt cp}
\end{itemize}

\vspace*{.5cm}
\item Making changes without a working copy:
\begin{itemize}
\item Most operations can also be performed directly on the repository:
\item {\tt svn copy -m "Commit message" $\backslash$} \\
\hspace*{1.5cm} {\tt file:///home/svn/repos/demo2.txt $\backslash$} \\
\hspace*{1.5cm} {\tt file:///home/svn/repos/demo3.txt}
\end{itemize}

\end{itemize}
\end{slide}

\begin{slide}{Committing changes}
\begin{itemize}

\item Commiting changes made in the working copy: \\
{\tt svn commit}

\vspace*{.5cm}
\item Listing status (modified, etc) of files in working copy: \\
{\tt svn status}

\vspace*{.5cm}
\item Bringing changes from the repository into the working copy: \\
{\tt svn up}

\end{itemize}
\end{slide}

\begin{slide}{Branches and tags}
\begin{itemize}

\item Subversion has no explicit support for branching.
\item But it has support for copying directories in O(1).

\vspace*{.4cm}
\item Creating a branch is just the same as creating a copy: \\
{\tt svn copy -m "Creating branch dummy" $\backslash$} \\
\hspace*{1.5cm} {\tt file:///home/svn/repos/trunk $\backslash$} \\
\hspace*{1.5cm} {\tt file:///home/svn/repos/branches/dummy}

\vspace*{.4cm}
\item Merging changes from somewhere else to working copy: \\
\vspace*{.2cm}
{\tt svn merge -r70:86 $\backslash$} \\
\hspace*{1cm} {\tt file:///svn/repos/branch/testing .} \\
\vspace*{.2cm}
{\tt svn merge file:///svn/repos/branch/stable $\backslash$} \\
\hspace*{1cm} {\tt file:///svn/repos/branch/testing .}

\vspace*{.4cm}
\item A ``tagged version'' is also just a copy. It just never gets modified.

\end{itemize}
\end{slide}

% ============================================================================

\tsectionandpart{References}

\begin{slide}{Getting Help (1)}
\begin{itemize}

\item The command {\tt svn help} lists all subcommands for {\tt svn}: \\
{\tt add, blame (praise, annotate, ann), cat, checkout (co), cleanup, commit (ci), copy (cp), delete (del, remove, rm), diff (di), export, help (?, h), import, info, list (ls), lock, log, merge, mkdir, move (mv, rename, ren), propdel (pdel, pd), propedit (pedit, pe), propget (pget, pg), proplist (plist, pl), propset (pset, ps), resolved, revert, status (stat, st), switch (sw), unlock, update (up)}

\vspace*{.5cm}
\item The command {\tt svn help {\it subcommand}} gives a detailed description

\end{itemize}
\end{slide}

\begin{slide}{Getting Help (2)}
\begin{itemize}

\item The command {\tt svnadmin help} does it for {\tt svnadmin}: \\
{\tt create, deltify, dump, help (?, h), hotcopy, list-dblogs, list-unused-dblogs, load, lslocks, lstxns, recover, rmlocks, rmtxns, setlog, verify}

\vspace*{.5cm}
\item The command {\tt svnadmin help {\it subcommand}} gives a detailed
description

\vspace*{.5cm}
\item The Subversion Handbook is a great Subversion tutorial: \\
http://svnbook.red-bean.com/

\end{itemize}
\end{slide}

\begin{slide}{URLs - Subversion and SubMaster}
\begin{itemize}

\item The Subversion Handbook: \\
http://svnbook.red-bean.com/
\vspace*{.5cm}

\item The Subversion Homepage: \\
http://subversion.tigris.org/
\vspace*{.5cm}

\item The SubMaster Homepage: \\
http://www.rocklinux.org/submaster.html
\vspace*{.5cm}

\end{itemize}
\end{slide}

\begin{slide}{URLs - Related Projects}
\begin{itemize}

\item SVK: A decentralized system based on Subversion \\
http://svk.elixus.org/
\vspace*{.5cm}

\item Transvn: A patch-scripts clone based on Subversion \\
http://alexm.here.ru/transvn/
\vspace*{.5cm}

\item SVM: Mirror Remote Subversion Repository to local \\
http://search.cpan.org/~clkao/SVN-Mirror/
\vspace*{.5cm}

\end{itemize}
\end{slide}

\end{document}

