summaryrefslogtreecommitdiff
path: root/Version_Control
diff options
context:
space:
mode:
Diffstat (limited to 'Version_Control')
-rw-r--r--Version_Control/.gitignore5
-rw-r--r--Version_Control/vcs (renamed from Version_Control/vcs1.rst)0
-rw-r--r--Version_Control/vcs1.pdfbin243928 -> 0 bytes
-rw-r--r--Version_Control/vcs1/vcs1.rst313
-rw-r--r--Version_Control/vcs1/vcslide1.tex320
-rw-r--r--Version_Control/vcs2/vcslide2.tex307
-rw-r--r--Version_Control/vcs3/vcs3.tex264
7 files changed, 1209 insertions, 0 deletions
diff --git a/Version_Control/.gitignore b/Version_Control/.gitignore
new file mode 100644
index 0000000..6d99674
--- /dev/null
+++ b/Version_Control/.gitignore
@@ -0,0 +1,5 @@
+*.aux
+*.pdf
+*.toc
+*.log
+*.out
diff --git a/Version_Control/vcs1.rst b/Version_Control/vcs
index bada154..bada154 100644
--- a/Version_Control/vcs1.rst
+++ b/Version_Control/vcs
diff --git a/Version_Control/vcs1.pdf b/Version_Control/vcs1.pdf
deleted file mode 100644
index c0026d0..0000000
--- a/Version_Control/vcs1.pdf
+++ /dev/null
Binary files differ
diff --git a/Version_Control/vcs1/vcs1.rst b/Version_Control/vcs1/vcs1.rst
new file mode 100644
index 0000000..9dbdefd
--- /dev/null
+++ b/Version_Control/vcs1/vcs1.rst
@@ -0,0 +1,313 @@
+
+.. Prerequisites
+.. -------------
+
+.. None
+
+.. Author : Primal Pappachan
+ Internal Reviewer :
+--------
+Script
+--------
+
+.. L1
+
+{{{ Show the first slide containing title, name of the production team along with the logo of MHRD}}}
+
+i.. R1
+
+Hello friends and welcome to the tutorial on 'Version Control with Hg'
+
+.. L2
+
+{{{Show the slide containing the objectives}}}
+
+.. R2
+
+At the end of this tutorial you will be able to
+
+1. Understand what is Version Control and the need for it.
+
+#. Create and use repository on a daily basis
+
+.. R3
+
+First let's understand what Version Control is
+
+.. L3
+
+{{{Show the slide 'what is version control'}}}
+
+.. R4
+
+Version control is just a way to track your files over time and share them. This allows you to go back to older versions when something goes wrong, see what changed when and why, collaborate on a single piece of work with a bunch of people.
+
+Version control is just a way of backing up your files, before making changes to it. Most people would have cooked up their own version control system, without realizing there are tools built by others which takes the task much more organized and systematic.
+
+.. L4
+
+{{{Show the slide 'Home-brewed'}}}
+
+.. R5
+
+Let's look at an example of home-brew Version Control system
+
+Version control is just a way of backing up your files, before making changes to it. Most people would have cooked up their own version control system, without realizing there are tools built by others which takes the task much more organized and systematic.
+
+.. L5
+
+{{{Show the slide 'Problems'}}}
+
+Let's look at the various problems associated with this setup.
+
+.. R6
+
+Now let's move onto identifying the needs for a Version Control System.
+
+.. L6
+
+{{{Show the slide 'The need for Version Control'}}}
+
+.. R7
+
+1. To err is Human...
+
+#. By tracking the history of the project, an outsider can see the evolution of a project.
+
+#. Allows for effective collaboration on the project as everything is shared.
+
+#. Helps to identify which additions have broken down the project and thus aids in efficient tracking down of the bugs.
+
+#. It is good for a one man show as it is for a big group of people working on a project.
+
+.. R8
+
+It is similar to playing an Video game.
+
+1. We play games in stages
+
+#. Once we finish a stage or a task - we SAVE
+
+#. We continue playing
+
+#. But, if necessary, we could choose from one of the saved states and start from there
+
+#. We could alter the course of the game
+
+.. L7
+
+{{{Show the slide 'Mercurial or hg'}}}
+
+.. R9
+
+Some of the Version Control tool available and used widely are:
+
+1. cvs(Concurrent Version Systems)
+
+#. svn(subversion)
+
+#. hg(mercurial)
+
+#. git
+
+.. R10
+
+Each of these tools have their own merits and demerits. In this tutorial we will be learning to use mercurial or hg.
+
+Let's now get into Installation
+
+.. L8
+
+sudo apt-get install mercurial
+
+.. R11
+
+For Windows,
+
+.. L9
+
+http://mercurial.selenic.com/downloads/
+
+Type 'hg' which lists out all the commands
+
+.. L10
+
+$hg
+
+.. R12
+
+and 'hg version' which gives the version number.
+
+.. L11
+
+$hg version
+
+.. R13
+
+Now why exactly is a repo? A repp/repository is a folder with all your files and a store of all the changes that were made to it. To save disk space, hg doesn't save all files, but only saves only a series of changes made to the files.
+
+.. L13
+
+{{{Show the slide for 'We need a repo!'}}}
+
+.. R14
+
+Let's now see how to initialize a repo
+
+.. L14
+
+cd working-directory/
+
+$hg init
+
+ls -a
+
+.. R15
+
+The .hg directory indicates that our book directory is now a hg repository. Mercurial keeps all the history of the changes made and a few other config files etc. in this directory.
+
+.. L13
+
+$hg status
+
+.. R15
+
+Gives the status of our repo. As a beginner, use it often.
+
+.. L14
+
+$hg help 'status'
+
+.. R16
+
+You can use 'hg help commandname' which gives the details about the command. For example.
+
+.. L15
+
+hg help status
+
+{{{Show the slides for 'Status Codes'}}}
+
+.. R17
+
+Have a look at what various status codes associated with files means. By looking at the codes, it is clear that our files are not yet being tracked by hg. Now Let's move onto Adding Files.
+
+.. L16
+
+$hg status
+
+.. R18
+
+This shows that none of the files in the folder have not been added yet.
+
+.. L17
+
+$hg add
+
+.. R19
+
+This simply adds all the files in the (working) directory, to the repository, As expected, the status command shows an A has been appeneded to the filenames. We could also specify files individually, for example
+
+.. L18
+
+$ hg add filename
+
+.. R20
+
+We have added a set of files to the repository, but we haven't told mercurial to remember these changes. Now let's take a snapshot of this working directory. This can be done by using commit command.
+
+.. L19
+
+$hg commit -u "Primal Papppachan <primal007@gmail.com>" -m "Initial Commit."
+
+.. R20
+
+The -u parameter allows to specify the user details. The parameter -m is used to attach a commit message which gives a description of the changes committed to the repository. Check the status of repository by typing
+
+.. L20
+
+$ hg st
+
+.. R21
+
+To see the history of changes made to our repository, we use hg log. We can view the change that we just made to our repoistory.
+
+.. L21
+
+{{{Show the slide 'Thumbnail views'}}}
+
+.. R21
+
+hg log gives the log of the changes made in the form of changesets. A changeset is a set of changes made to the repository between two consecutive commits. It also shows the date at which the commit was made.
+
+
+.. R22
+
+User information is set in the hgrc file. It can be either globally or locally to the project.
+
+.. L23
+
+For linux systems
+
+cat ~8.hgrc
+[ui]
+username = Primal Pappachan <primal007@gmail.com>
+editor = vim
+
+
+.. R23
+
+
+We have now set the username details for mercurial to use.
+
+.. L24
+
+{{{Show the slide 'Advice: commits, messages'}}}
+
+.. R24
+
+1. Atomic changes; one change with one commit
+
+#. Single line summary — 60 to 65 characters long
+
+#. Followed by paragraphs of detailed description
+ - Why the change?
+ - What does it effect?
+ - Known bugs/issues?
+ - etc.
+
+.. L25
+
+{{{Show the 'summary' slide'}}}
+
+.. R25
+
+This brings us to the end of the tutorial. In this tutorial, we have
+learnt to,
+
+.. L26
+
+{{{Show self assessment questions slide}}}
+
+.. R26
+
+Here are some self assessment questions for you to solve
+
+.. L27
+
+{{{Show the solutions slide to self assessment questions }}}
+
+.. R27
+
+And the answers,
+
+
+.. L27
+
+{{{Show the thank you slide}}}
+
+.. R28
+
+Hope you have enjoyed this tutorial and found it useful.
+Thank you
+
diff --git a/Version_Control/vcs1/vcslide1.tex b/Version_Control/vcs1/vcslide1.tex
new file mode 100644
index 0000000..f885c1e
--- /dev/null
+++ b/Version_Control/vcs1/vcslide1.tex
@@ -0,0 +1,320 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version Control Systems
+%
+% Author: FOSSEE
+% Copyright (c) 2009, FOSSEE, IIT Bombay
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[14pt,compress]{beamer}
+
+\mode<presentation>
+{
+ \usetheme{Warsaw}
+ \useoutertheme{infolines}
+ \setbeamercovered{transparent}
+}
+
+\usepackage[english]{babel}
+\usepackage[latin1]{inputenc}
+%\usepackage{times}
+\usepackage[T1]{fontenc}
+
+% Taken from Fernando's slides.
+\usepackage{ae,aecompl}
+\usepackage{mathpazo,courier,euler}
+\usepackage[scaled=.95]{helvet}
+
+\definecolor{darkgreen}{rgb}{0,0.5,0}
+
+\usepackage{listings}
+\lstset{language=bash,
+ basicstyle=\ttfamily\bfseries,
+ commentstyle=\color{red}\itshape,
+ stringstyle=\color{darkgreen},
+ showstringspaces=false,
+ keywordstyle=\color{blue}\bfseries}
+
+\begin{document}
+
+\begin{frame}
+
+\begin{center}
+\vspace{12pt}
+\textcolor{blue}{\huge Using Linux Tools}
+\end{center}
+\vspace{18pt}
+\begin{center}
+\vspace{10pt}
+\includegraphics[scale=0.95]{../images/fossee-logo.png}\\
+\vspace{5pt}
+\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\
+\scriptsize Funded by National Mission on Education through ICT\\
+\scriptsize MHRD,Govt. of India\\
+\includegraphics[scale=0.30]{../images/iitb-logo.png}\\
+\end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Objectives}
+ At the end of this session, you will be able to:
+ \begin{itemize}
+ \item Understand what is Version Control and the need for it.
+ \item Create and use repository on a daily basis.
+ \end{itemize}
+\end{frame}
+
+%% There are some %$ used just to minimise the effect of $ sign used
+%% in lstlisting. In emacs it looks dirty.
+
+% Introduction to course-need of version control, history, options available.
+\section{Introduction}
+
+\begin{frame}
+ \frametitle{What is Version Control?}
+ \begin{block}{}
+ A way to track changes made to files over time, by keeping copies
+ of files as we change them.
+ \end{block}
+\end{frame}
+
+%% Home made version control system?
+\begin{frame}[fragile]
+ \frametitle{Home-brewed}
+ \begin{center}
+ An example of a \typ{home-brew} Version Control system
+ \includegraphics[height=1.8in,width=4.2in]{images/folder.png}
+ \end{center}
+ \begin{lstlisting}
+$ ls
+a.out id1.txt id2.txt identifier.cpp id.txt lex pda1.cpp pda2.cpp pda.cpp pda.txt string.txt
+ \end{lstlisting} %%$
+ %%a screen-shot of folder with all crazy names.
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Problems}
+ \begin{block}{}
+ \begin{itemize}
+ \item Name and changes made are not related or linked.
+ \item Can't track sequence of changes made to a file.
+ \item Does not scale.
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{The need for Version Control}
+ \begin{itemize}
+ \item \alert{To err is Human} \ldots
+ \item Tracking the history and evolution of a project
+ \item To collaborate effectively on a project
+ \item To efficiently track down bugs and pin-point the changes that
+ caused it
+ \end{itemize}
+\end{frame}
+
+%% Introduction to how logs are managed in VCS.
+%% A analogy in logs and day-to-day life?
+\begin{frame}[fragile]
+ \frametitle{How does it work? --- Analogy}
+ It is, in some ways, similar to playing an Video game.
+ \begin{itemize}
+ \item We play games in stages
+ \item Once we finish a stage or a task -- \alert{we SAVE}
+ \item We continue playing
+ \item But, if necessary, we could choose from one of the saved
+ states and start from there
+ \item We could alter the course of the game
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{Mercurial or \typ{hg}}
+ \begin{center}
+ \includegraphics[height=.75in,interpolate=true]{images/mercurial_logo}
+ \end{center}
+ \begin{itemize}
+ \item Easy to learn and use
+ \item Lightweight
+ \item Scales excellently
+ \item Written in Python
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Installation}
+ \begin{itemize}
+ \item \typ{sudo apt-get install mercurial}
+ \item TortoiseHg
+ \item \typ{\$ hg}
+ \item \typ{\$ hg version}
+ \end{itemize}
+\end{frame}
+
+\section{Let there be a Repo!}
+% init, status, commit, log, [ui]
+\begin{frame}
+ \frametitle{We need a repo!}
+ \begin{itemize}
+ \item A Repository (repo) is where all the action is!
+ \item Project files along with a special directory that stores all the
+ changes
+ \item We take snapshots of the whole repository; not individual
+ files.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Initializing a repo}
+ \begin{itemize}
+ \item \typ{\$ hg init}
+ \item Creates a fresh repository
+ \item Adds a \typ{.hg} directory to our \emph{working directory}
+ \end{itemize}
+ \emphbar{\typ{.hg} directory keeps log of changes made henceforth}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Status report}
+ \begin{itemize}
+ \item \typ{hg status} gives the status of our repo
+ \item Use it often; at least as a beginner
+ \item \typ{hg help command} gives us help about \typ{command}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Status codes}
+ \begin{lstlisting}
+ M = modified
+ A = added
+ R = removed
+ C = clean
+ ! = missing
+ ? = not tracked
+ I = ignored
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Adding files}
+ \begin{itemize}
+ \item From \typ{hg status} we know, none of the files are being
+ tracked, yet.
+ \item \typ{hg add} --- asking \typ{hg} to track these files
+ \item As expected \typ{hg status} prepends an \typ{A} to the file
+ names.
+ \item \typ{? --> A}
+ \item \typ{! --> R} (\typ{hg remove})
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Taking Snapshots}
+ \begin{itemize}
+ \item \typ{hg commit}
+ \item Asking Mercurial to take a snapshot; remember the changes made
+ to the repository.
+ \item \typ{-u FirstName LastName <email>}
+ \item \typ{-m ``Commit message''} -- a description of changes committed.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Thumbnail views}
+ \begin{itemize}
+ \item \typ{hg log}~ gives the log of the changes made
+ \item A \typ{changeset} is an atomic collection of changes to the
+ files (between successive commits)
+ \end{itemize}
+ \begin{block}{Log information}
+ \begin{itemize}
+ \item \alert{changeset}: Identifier for the changeset
+ \item \alert{user}: Details of user who created the changeset
+ \item \alert{date}: Date and time of creation
+ \item \alert{summary}: One line description
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\begin{frame}
+ \frametitle{User information}
+ \begin{itemize}
+ \item User information is set in the \typ{hgrc} file
+ \item It can be set globally or local to the project
+ \item Global \typ{hgrc}
+ \begin{itemize}
+ \item \typ{\$HOME/.hgrc} -- Unix like systems
+ \item \typ{\%HOME\%\\.hgrc} -- Windows
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{\alert{Advice}: \typ{commits}, messages}
+ \begin{itemize}
+ \item Atomic changes; one change with one \typ{commit}
+ \item Single line summary --- 60 to 65 characters long
+ \item Followed by paragraphs of detailed description
+ \begin{itemize}
+ \item Why the change?
+ \item What does it effect?
+ \item Known bugs/issues?
+ \item etc.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Summary}
+\label{sec-8}
+
+ In this tutorial, we have learnt to,
+
+
+\begin{itemize}
+\item
+\item
+\item
+\item
+\end{itemize}
+\end{frame}
+\begin{frame}[fragile]
+\frametitle{Evaluation}
+\label{sec-9}
+
+
+\begin{enumerate}
+\item
+\item
+\item
+\end{enumerate}
+\end{frame}
+\begin{frame}
+\frametitle{Solutions}
+\label{sec-10}
+
+
+\begin{enumerate}
+\item
+\vspace{15pt}
+\item
+\end{enumerate}
+\end{frame}
+\begin{frame}
+
+\begin{block}{}
+ \begin{center}
+ \textcolor{blue}{\Large THANK YOU!}
+ \end{center}
+ \end{block}
+\begin{block}{}
+ \begin{center}
+ For more Information, visit our website\\
+ \url{http://fossee.in/}
+ \end{center}
+ \end{block}
+\end{frame}
+
+\end{document}
diff --git a/Version_Control/vcs2/vcslide2.tex b/Version_Control/vcs2/vcslide2.tex
new file mode 100644
index 0000000..12bdd7b
--- /dev/null
+++ b/Version_Control/vcs2/vcslide2.tex
@@ -0,0 +1,307 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version Control Systems
+%
+% Author: FOSSEE
+% Copyright (c) 2009, FOSSEE, IIT Bombay
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,compress]{beamer}
+
+\mode<presentation>
+{
+ \usetheme{Warsaw}
+ \useoutertheme{infolines}
+ \setbeamercovered{transparent}
+}
+
+\usepackage[english]{babel}
+\usepackage[latin1]{inputenc}
+%\usepackage{times}
+\usepackage[T1]{fontenc}
+
+% Taken from Fernando's slides.
+\usepackage{ae,aecompl}
+\usepackage{mathpazo,courier,euler}
+\usepackage[scaled=.95]{helvet}
+
+\definecolor{darkgreen}{rgb}{0,0.5,0}
+
+\usepackage{listings}
+\lstset{language=bash,
+ basicstyle=\ttfamily\bfseries,
+ commentstyle=\color{red}\itshape,
+ stringstyle=\color{darkgreen},
+ showstringspaces=false,
+ keywordstyle=\color{blue}\bfseries}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DOCUMENT STARTS
+\begin{document}
+
+\begin{frame}
+
+\begin{center}
+\vspace{12pt}
+\textcolor{blue}{\huge Version Control with hg}
+\end{center}
+\vspace{18pt}
+\begin{center}
+\vspace{10pt}
+\includegraphics[scale=0.95]{../images/fossee-logo.png}\\
+\vspace{5pt}
+\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\
+\scriptsize Funded by National Mission on Education through ICT\\
+\scriptsize MHRD,Govt. of India\\
+\includegraphics[scale=0.30]{../images/iitb-logo.png}\\
+\end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Objectives}
+\label{sec-2}
+ At the end of this session, you will be able to:
+ \begin{itemize}
+ \item Make changes to a repository and commit them
+ \item
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Pre-requisite}
+\label{sec-3}
+
+
+Spoken tutorial on -
+\begin{itemize}
+\item
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Operational overhead?}
+ \begin{itemize}
+ \item But why do we \typ{commit}?
+ \item Isn't all this just adding to operational costs?
+ \item Isn't all this a waste of time?
+ \end{itemize}
+ \begin{center}
+ \emphbar{No! You shall see the benefits, soon!}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Revert Changes}
+ \begin{itemize}
+ \item Undo all changes; the editor can only do so much.
+ \item \typ{hg revert --all}
+ \item \typ{hg revert filename}
+ \item Present file, with changes --- \typ{filename.orig}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Viewing Changes}
+ \begin{itemize}
+ \item \typ{hg diff} --- all changes since last commit
+ \end{itemize}
+ \begin{block}{}
+ \begin{lstlisting}
+ - this line was deleted
+ + this line was added
+ \end{lstlisting}
+ \end{block}
+\end{frame}
+
+
+\begin{frame}[fragile]
+ \frametitle{Revision numbering}
+ \begin{itemize}
+ \item \typ{changeset: n:cbf6e2a375b4}
+ \item \typ{n} is the revision number
+ \item The revision number is local to a repository
+ \item \typ{cbf6e2a375b4} is the unique identifier
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Using revision numbers}
+ \begin{itemize}
+ \item \typ{-r n} can be passed as arguments to commands to specify
+ the revision number
+ \item For instance, \typ{hg diff -r1 -r2}
+ \item \typ{m:n} specifies a range of revision numbers
+ \item For instance, \typ{hg log -r0:2}
+ \end{itemize}
+\end{frame}
+
+\section{Collaborating with Mercurial}
+\begin{frame}[fragile]
+ \frametitle{Cloning Repositories}
+ \begin{itemize}
+ \item \typ{hg clone SOURCE [DEST]}
+ \item All \typ{hg} repositories are self-contained
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Sharing Repositories}
+ \begin{itemize}
+ \item \typ{hg serve}
+ \item Can be cloned with \typ{hg clone http://my-ip-address:8000}
+ \item We share a central repository; work on our local copies.
+ \item Set write permissions in \typ{.hg/hgrc}
+ \end{itemize}
+ \begin{lstlisting}
+ [web]
+ push_ssl=False
+ allow_push=*
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Sharing Changes}
+ \begin{itemize}
+ \item Use \typ{hg push} to push your \typ{commits}
+ (\typ{changesets}) to the central repository
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{Pulling Changes}
+ \begin{itemize}
+ \item \typ{hg incoming} shows new \typ{changesets} in the server
+ \item To get these \typ{changesets}, we use \typ{hg pull}
+ \item These changes do not affect our working directory
+ \item \typ{hg parent} shows the parents of the working directory
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Pulling Changes \ldots}
+ \begin{itemize}
+ \item \typ{hg update} will update the working directory
+ \begin{itemize}
+ \item Updates to the \typ{tip} if no revision is specified
+ \item \typ{tip} is the most recently added changeset
+ \item Can specify revision number to update to
+ \end{itemize}
+ \item \typ{hg tip} shows the \typ{tip} of the repository
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Simultaneous Changes}
+ \begin{itemize}
+ \item The logs of both repositories will be different
+ \item The repositories have diverged
+ \item \typ{hg push} fails, in such a scenario
+ \item \alert{Never, Never, Never, Ever} use \typ{hg push -f}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Merging}
+ \begin{itemize}
+ \item Pull and merge, when \typ{abort: push creates new remote
+ heads!}
+ \item \typ{hg merge} will merge the two diverged heads
+ \item \typ{commit} after you have \typ{merged}!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Simultaneous Changes \ldots}
+ \begin{itemize}
+ \item \typ{outgoing} shows the \typ{changesets} that will be pushed
+ \item \typ{hg push} works!
+ \item Look at the `Change graph'!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Simultaneous Conflicting Changes}
+ \begin{itemize}
+ \item What if the changes conflict? -- overlapping edits
+ \item \typ{hg push} fails; \typ{hg pull}; \typ{hg merge}
+ \item You now get a diff view with 3 panes
+ \begin{itemize}
+ \item First --- current file
+ \item Second --- \typ{changesets} that you pulled
+ \item Third --- file before you made your changes
+ \end{itemize}
+ \item Resolve conflict and save
+ \item \typ{hg commit}; \typ{hg push}
+ \item Look at the `Change graph'!
+ \end{itemize}
+\end{frame}
+
+\section{Conclusion}
+
+\begin{frame}
+ \frametitle{\alert{Advice}: Work-flow}
+ General work-flow
+ \begin{itemize}
+ \item \typ{pull}; \typ{update}
+ \item Make changes
+ \item \typ{commit}
+ \item If changes on repo, \typ{pull} and \typ{merge}
+ \item \typ{push}
+ \end{itemize}
+ \emphbar{Commit Early, Commit Often}
+\end{frame}
+
+\begin{frame}
+\frametitle{Summary}
+\label{sec-18}
+
+ In this tutorial, we have learnt to,
+
+
+\begin{itemize}
+\item
+\item
+\item
+\item
+\end{itemize}
+\end{frame}
+\begin{frame}[fragile]
+\frametitle{Evaluation}
+\label{sec-19}
+
+
+\begin{enumerate}
+\item
+\item
+\item
+\end{enumerate}
+\end{frame}
+\begin{frame}
+\frametitle{Solutions}
+\label{sec-20}
+
+
+\begin{enumerate}
+\item
+\vspace{15pt}
+\item
+\end{enumerate}
+\end{frame}
+\begin{frame}
+
+
+\begin{block}{}
+ \begin{center}
+ \textcolor{blue}{\Large THANK YOU!}
+ \end{center}
+ \end{block}
+\begin{block}{}
+ \begin{center}
+ For more Information, visit our website\\
+ \url{http://fossee.in/}
+ \end{center}
+ \end{block}
+\end{frame}
+
+\end{document}
+
diff --git a/Version_Control/vcs3/vcs3.tex b/Version_Control/vcs3/vcs3.tex
new file mode 100644
index 0000000..0ac196e
--- /dev/null
+++ b/Version_Control/vcs3/vcs3.tex
@@ -0,0 +1,264 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version Control Systems
+%
+% Author: FOSSEE
+% Copyright (c) 2009, FOSSEE, IIT Bombay
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,compress]{beamer}
+
+\mode<presentation>
+{
+ \usetheme{Warsaw}
+ \useoutertheme{infolines}
+ \setbeamercovered{transparent}
+}
+
+\usepackage[english]{babel}
+\usepackage[latin1]{inputenc}
+%\usepackage{times}
+\usepackage[T1]{fontenc}
+
+% Taken from Fernando's slides.
+\usepackage{ae,aecompl}
+\usepackage{mathpazo,courier,euler}
+\usepackage[scaled=.95]{helvet}
+
+\definecolor{darkgreen}{rgb}{0,0.5,0}
+
+\usepackage{listings}
+\lstset{language=bash,
+ basicstyle=\ttfamily\bfseries,
+ commentstyle=\color{red}\itshape,
+ stringstyle=\color{darkgreen},
+ showstringspaces=false,
+ keywordstyle=\color{blue}\bfseries}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros
+\setbeamercolor{emphbar}{bg=blue!20, fg=black}
+\newcommand{\emphbar}[1]
+{\begin{beamercolorbox}[rounded=true]{emphbar}
+ {#1}
+ \end{beamercolorbox}
+}
+\newcounter{time}
+\setcounter{time}{0}
+\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}
+\newcommand{\typ}[1]{\lstinline{#1}}
+\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DOCUMENT STARTS
+\begin{document}
+
+\begin{frame}
+
+\begin{center}
+\vspace{12pt}
+\textcolor{blue}{\huge Version Control with hg}
+\end{center}
+\vspace{18pt}
+\begin{center}
+\vspace{10pt}
+\includegraphics[scale=0.95]{../images/fossee-logo.png}\\
+\vspace{5pt}
+\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\
+\scriptsize Funded by National Mission on Education through ICT\\
+\scriptsize MHRD,Govt. of India\\
+\includegraphics[scale=0.30]{../images/iitb-logo.png}\\
+\end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Objectives}
+\label{sec-2}
+
+ At the end of this session, you will be able to:
+ \begin{itemize}
+ \item Clone existing repositories, from the web.
+ \item View the history of a repository.
+ \item Work collaboratively with a team.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Cloning Repositories}
+\label{sec-3}
+
+ \begin{itemize}
+ \item \typ{hg clone SOURCE [DEST]}
+ \item All \typ{hg} repositories are self-contained
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Sharing Repositories}
+\label{sec-4}
+
+ \begin{itemize}
+ \item \typ{hg serve}
+ \item Can be cloned with \typ{hg clone http://my-ip-address:8000}
+ \item We share a central repository; work on our local copies.
+ \item Set write permissions in \typ{.hg/hgrc}
+ \end{itemize}
+ \begin{lstlisting}
+ [web]
+ push_ssl=False
+ allow_push=*
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Sharing Changes}
+\label{sec-5}
+
+ \begin{itemize}
+ \item Use \typ{hg push} to push your \typ{commits}
+ (\typ{changesets}) to the central repository
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{Pulling Changes}
+\label{sec-6}
+
+ \begin{itemize}
+ \item \typ{hg incoming} shows new \typ{changesets} in the server
+ \item To get these \typ{changesets}, we use \typ{hg pull}
+ \item These changes do not affect our working directory
+ \item \typ{hg parent} shows the parents of the working directory
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Pulling Changes \ldots}
+\label{sec-7}
+
+ \begin{itemize}
+ \item \typ{hg update} will update the working directory
+ \begin{itemize}
+ \item Updates to the \typ{tip} if no revision is specified
+ \item \typ{tip} is the most recently added changeset
+ \item Can specify revision number to update to
+ \end{itemize}
+ \item \typ{hg tip} shows the \typ{tip} of the repository
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Simultaneous Changes}
+\label{sec-8}
+
+ \begin{itemize}
+ \item The logs of both repositories will be different
+ \item The repositories have diverged
+ \item \typ{hg push} fails, in such a scenario
+ \item \alert{Never, Never, Never, Ever} use \typ{hg push -f}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Merging}
+\label{sec-9}
+
+ \begin{itemize}
+ \item Pull and merge, when \typ{abort: push creates new remote
+ heads!}
+ \item \typ{hg merge} will merge the two diverged heads
+ \item \typ{commit} after you have \typ{merged}!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Simultaneous Changes \ldots}
+\label{sec-10}
+
+ \begin{itemize}
+ \item \typ{outgoing} shows the \typ{changesets} that will be pushed
+ \item \typ{hg push} works!
+ \item Look at the `Change graph'!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Simultaneous Conflicting Changes}
+\label{sec-11}
+
+ \begin{itemize}
+ \item What if the changes conflict? -- overlapping edits
+ \item \typ{hg push} fails; \typ{hg pull}; \typ{hg merge}
+ \item You now get a diff view with 3 panes
+ \begin{itemize}
+ \item First --- current file
+ \item Second --- \typ{changesets} that you pulled
+ \item Third --- file before you made your changes
+ \end{itemize}
+ \item Resolve conflict and save
+ \item \typ{hg commit}; \typ{hg push}
+ \item Look at the `Change graph'!
+ \end{itemize}
+\end{frame}
+\begin{frame}
+ \frametitle{\alert{Advice}: Work-flow}
+\label{sec-11}
+
+ General work-flow
+ \begin{itemize}
+ \item \typ{pull}; \typ{update}
+ \item Make changes
+ \item \typ{commit}
+ \item If changes on repo, \typ{pull} and \typ{merge}
+ \item \typ{push}
+ \end{itemize}
+ \emphbar{Commit Early, Commit Often}
+\end{frame}
+\begin{frame}
+\frametitle{Summary}
+\label{sec-12}
+
+ In this tutorial, we have learnt to,
+
+\begin{itemize}
+\item
+\item
+\item
+\item
+\end{itemize}
+\end{frame}
+\begin{frame}[fragile]
+\frametitle{Evaluation}
+\label{sec-13}
+
+\begin{enumerate}
+\item
+\item
+\item
+\end{enumerate}
+\end{frame}
+\begin{frame}
+\frametitle{Solutions}
+\label{sec-14}
+
+\begin{enumerate}
+\item
+\vspace{15pt}
+\item
+\end{enumerate}
+\end{frame}
+\begin{frame}
+
+\begin{block}{}
+ \begin{center}
+ \textcolor{blue}{\Large THANK YOU!}
+ \end{center}
+ \end{block}
+\begin{block}{}
+ \begin{center}
+ For more Information, visit our website\\
+ \url{http://fossee.in/}
+ \end{center}
+ \end{block}
+\end{frame}
+
+\end{document}