From 772593839a0d38b856c905b9c42e864bc508083d Mon Sep 17 00:00:00 2001
From: Primal Pappachan
Date: Fri, 27 Jan 2012 17:12:35 +0530
Subject: Split from earlier first part

---
 Version_Control/vcs2/vcslide2.tex | 293 +++++++++++++++-----------------------
 1 file changed, 112 insertions(+), 181 deletions(-)

(limited to 'Version_Control/vcs2/vcslide2.tex')

diff --git a/Version_Control/vcs2/vcslide2.tex b/Version_Control/vcs2/vcslide2.tex
index 82e6b21..4ab4ecf 100644
--- a/Version_Control/vcs2/vcslide2.tex
+++ b/Version_Control/vcs2/vcslide2.tex
@@ -1,11 +1,11 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Version Control Systems
 %
 % Author: FOSSEE 
-% Copyright (c) 2009, FOSSEE, IIT Bombay
+% Copyright (c) 2012, FOSSEE, IIT Bombay
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\documentclass[12pt,compress]{beamer}
+\documentclass[14pt,compress]{beamer}
 
 \mode<presentation>
 {
@@ -43,15 +43,14 @@
 \setbeamercolor{emphbar}{bg=blue!20, fg=black}
 \newcommand{\emphbar}[1]
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% DOCUMENT STARTS
+
 \begin{document}
 
 \begin{frame}
 
 \begin{center}
 \vspace{12pt}
-\textcolor{blue}{\huge Version Control with hg}
+\textcolor{blue}{\huge Version Control Using Hg - Part 2}
 \end{center}
 \vspace{18pt}
 \begin{center}
@@ -61,250 +60,183 @@
 \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.jpg}\\
+\includegraphics[scale=0.15]{../images/iitb-logo.jpg}\\
 \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 Learn how to view and revert changes made to files in a repository.
-  \item Learn how to share repositories and deal with simultaneous conflicting changes.
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Pre-requisite}
-\label{sec-3}
-
-
-Spoken tutorial on -
-\begin{itemize}
-\item 
-\end{itemize}
+	\frametitle{Prerequisite}
+	\textbf{Version Control Using Hg}
+	\begin{itemize}
+	\item Part I
+	\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}
+  \frametitle{Objectives}
+  At the end of this tutorial, you will be able to:
   \begin{itemize}
-  \item \typ{hg diff} --- all changes since last commit
+  \item Initialize a new repository,
+  \item Obtain the status of a repository,
+  \item Add new files to a repository,
+  \item Take snapshots of a repository,
+  \item View the history of a repository,
+  \item Set your user information for hg 
   \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}
+\section{Let there be a Repo!}
+% init, status, commit, log, [ui]
+\begin{frame}
+  \frametitle{We need a repo!}
   \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
+  \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}[fragile]
-  \frametitle{Using revision numbers}
+\begin{frame}
+  \frametitle{Initializing a repo}
   \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}
+  \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}
 
-\section{Collaborating with Mercurial}
-\begin{frame}[fragile]
-  \frametitle{Cloning Repositories}
+\begin{frame}
+  \frametitle{Status report}
   \begin{itemize}
-  \item \typ{hg clone SOURCE [DEST]}
-  \item All \typ{hg} repositories are self-contained
+  \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{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}
+  \frametitle{Status codes}
   \begin{lstlisting}
-    [web]
-    push_ssl=False
-    allow_push=*
+    M = modified                                               
+    A = added                                                  
+    R = removed                                                
+    C = clean                                                  
+    ! = missing 
+    ? = not tracked                                            
+    I = ignored                                                
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}
-  \frametitle{Sharing Changes}
+  \frametitle{Adding files}
   \begin{itemize}
-  \item Use \typ{hg push} to push your \typ{commits}
-    (\typ{changesets}) to the central repository
+  \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{Pulling Changes}
+  \frametitle{Taking Snapshots}
   \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
+  \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{Pulling Changes \ldots}
+  \frametitle{Thumbnail views}
   \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'!
+  \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{Simultaneous Conflicting Changes}
+  \frametitle{User information}
   \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 
+  \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 First --- current file
-    \item Second --- \typ{changesets} that you pulled
-    \item Third --- file before you made your changes
+    \item \typ{\$HOME/.hgrc} -- Unix like systems
+    \item \typ{\%HOME\%\\.hgrc} -- Windows
     \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
+  \frametitle{\alert{Advice}: \typ{commits}, messages}
   \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}
+  \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}
-  \emphbar{Commit Early, Commit Often}
 \end{frame}
 
-\begin{frame}
-\frametitle{Summary}
-\label{sec-18}
-
-In this tutorial, we have learnt to,
-
+\begin{frame}[fragile]
+\frametitle{Summary...}
 \begin{itemize}
-\item Undo changes to the repository using hg revert,
-\item View changes done to the repository using hg diff
-\item Use revision numbers as arguments to different hg commands
-\item Clone repositories, using hg clone,
-\item Serve our repositories via http using hg serve,
-\item push changes to a repository using hg push,
-\item check the changesets in a repository after last pull, using hg incoming,
-\item pull changes from a repository using hg pull ,
-\item update the working directory, using hg update,
-\item merge two heads, using hg merge,
-\item and resolve conflicts using hg resolve.
+\item How to initialize a new repository using hg init,
+\item Get the status of a repository using hg status and meaning of it's status codes
+\item Make commits of changes to files, using hg commit 
+\item View the history of the repository using the hg log command,
+\item Set our user information in the global hgrc file.
 \end{itemize}
 \end{frame}
+
 \begin{frame}[fragile]
 \frametitle{Evaluation}
-\label{sec-19}
-
-
 \begin{enumerate}
-\item 
-\item 
-\item 
+\item \small{How can you tell hg to stop tracking deleted files?}
+\item \small{What happens when 'hg commit' command is run first time without specifying username as parameter or creating the hg configuration file?}
+\item \small{ Here's a part of the output that is printed in 'hg log'.\\}
+\tiny{
+	changeset:   1:2278160e78d4 \\
+	tag:         tip \\
+	user:        Primal Pappachan <primal@fossee.in> \\
+	date:        Sat Jan 26 22:16:53 2012 +0530 \\
+	summary:     Added Readme \\}
+\small{Try to identify each component of this changeset and it's meaning. In the changeset, what is the significance of the number as well as hexadecimal string?} 
 \end{enumerate}
 \end{frame}
+
 \begin{frame}
 \frametitle{Solutions}
-\label{sec-20}
-
-
 \begin{enumerate}
-\item 
-\vspace{15pt}
-\item 
+\item \small{hg remove}
+\item \small{The revision number is a handy notation that is only valid in that repository. The hexadecimal string is the permanent, unchanging identifier that will always identify that exact changeset in every copy of the repository} 	
+\item \small{If you have set the EMAIL environment variable, this will be used. Next, Mercurial will query your system to find out your local user name and host name, and construct a username from these components. Since this often results in a username that is not very useful, it will print a warning if it has to do this. If all of these mechanisms fail, Mercurial will fail, printing an error message. In this case, it will not let you commit until you set up a username.}	
 \end{enumerate}
 \end{frame}
 \begin{frame}
 
-
 \begin{block}{}
   \begin{center}
   \textcolor{blue}{\Large THANK YOU!} 
@@ -318,5 +250,4 @@ In this tutorial, we have learnt to,
   \end{block}
 \end{frame}
 
-\end{document}
-
+\end{document}
\ No newline at end of file
-- 
cgit 

