--- a/versionControl/vcs.tex Wed Feb 03 17:33:59 2010 +0530
+++ b/versionControl/vcs.tex Thu Mar 04 11:18:27 2010 +0530
@@ -123,30 +123,50 @@
% Introduction to course-need of version control, history, options available.
\section{Introduction}
+%% Home made version control system?
+\begin{frame}[fragile]
+ \frametitle{Home-brew}
+ \begin{center}
+ \includegraphics[height=1.8in,width=4.2in]{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 with such nomenclature}
+ \begin{block}{}
+ \begin{itemize}
+ \item Difficult to relate to content of file.
+ \item Cant track changes done to file.
+ \item It wont scale.
+ \end{itemize}
+ \end{block}
+\end{frame}
+
\begin{frame}
- \frametitle{What is Version Control?}
+ \frametitle{What is version control}
\begin{block}{From a blog post}
- ``Version control (or source control) is nothing more arcane than keeping copies of ones work as one make changes to it.''
- \end{block}
- \pause
- \begin{block}{}
- It is better to use these tools rather than wasting creativity to invent VCS which have files with names like \begin{color}{red}{prog1.py, prog2.py}\end{color} or \begin{color}{red}prog-old.py, prog.py.\end{color}
+ ``Version control (or source control) is nothing more than keeping copies of work as we make changes to it.''
\end{block}
\end{frame}
-\begin{frame}
- \frametitle{Motivation behind such tools}
+\begin{frame}[fragile]
+ \frametitle{Need of Version Control}
\begin{itemize}
\item Track the history and evolution of a program.
\item To collaborate effectively on a project.
- \item \begin{color}{red}``To err is Human''\end{color} \pause for recovery we have ``Version Control''
+ \item \begin{color}{red}``To err is Human''\end{color} for recovery we have ...
\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?}
+ \frametitle{How does it work? Analogy}
It can roughly be related to Computer/Video Games.
\begin{itemize}
\item We play games in stages.
@@ -168,115 +188,134 @@
\begin{frame}
\frametitle{How is it done?}
\begin{itemize}
- \item It keeps track of changes you make to a file. You can improvise, revisit, and amend.
- \item All procedure is logged/recorded, so you and others can follow the development cycle.
+ \item It keeps track of changes you make to a file. You can improve, revisit, and amend.
+ \item All changes are logged/recorded, so you and others can follow the development cycle.
\end{itemize}
\end{frame}
-\begin{frame}
- \frametitle{Do we really need this?}
- \emphbar{For team of people working remotely(even different computers/machines) on a project, use of version control is inevitable!}
- \vspace{0.15in}
- \emphbar{For single person: managing projects and assignments becomes easy}
- \vspace{0.15in}
- \pause
- \emphbar{\color{red}{It is a good habit!}}
-\end{frame}
+
+%% Introduction to jargon
+%% This should have some excerpts from normal systems.
+%% Like diffs, folders etc.
+
+%% \section{Learning the Lingo!}
+
+%% \begin{frame}[fragile]
+%% \frametitle{Common jargon: Basic setup}
+%% \begin{lstlisting}
+%% $ ls slides/
+%% filter.png lena_mean.png lena.png
+%% neighbour.png pool.aux pool.log
+%% pool.nav pool.out pool.pdf pool.snm
+%% pool.tex pool.tex~ pool.toc pool.vrb
+%% \end{lstlisting} %%$
+%% \begin{itemize}
+%% \item Repository(repo):\\
+%% The folder with all files.
+%% %% \item Server:\\
+%% %% Machine with main inventory/repo.
+%% %% \item Client:\\
+%% %% Local machines with copy of main repo.
+%% \end{itemize}
+%% \end{frame}
+
+%% \begin{frame}[fragile]
+%% \frametitle{Actions}
+%% \begin{itemize}
+%% \item Add:\\
+%% Creating/Copying files(cp, touch).
+%% \item Check out/Clone:\\
+%% Creating copy of working folder.
+%% \end{itemize}
+%% \begin{lstlisting}
+%% $ cp -rv circulate/ local
+%% `circulate/' -> `local'
+%% `circulate/sslc1.txt' -> `local/sslc1.txt'
+%% `circulate/pos.txt' -> `local/pos.txt'
+%% `circulate/pendulum.txt' -> `local/pendulum.txt'
+%% `circulate/lena.png' -> `local/lena.png'
+%% `circulate/sslc1.py' -> `local/sslc1.py'
+%% `circulate/points.txt' -> `local/points.txt'
+%% \end{lstlisting} %%$
+%% \end{frame}
-\begin{frame}
- \frametitle{Whats on the menu!}
- \begin{itemize}
- \item cvs (Concurrent Version System)
- \item svn (Subversion)
- \item hg (Mercurial)
- \item bzr (Bazaar)
- \item git
- \end{itemize}
- \inctime{10}
-\end{frame}
+%% \begin{frame}
+%% \frametitle{Actions cont...}
+%% \begin{itemize}
+%% \item Version:\\
+%% Version number(Die Hard 4.0).\\
+%% Making changes to folder, changes state/version.
+%% \item Head/Tip:\\
+%% Most recent revision/stage.
+%% \item Commit:\\
+%% Saving(recording) a change.
+%% \item Change log/History:\\
+%% List of all past changes.
+%% \end{itemize}
+%% \end{frame}
-% Introduction to jargon
-\section{Learning the Lingo!}
+%% \begin{frame}
+%% \frametitle{Actions cont...}
+%% \begin{itemize}
+%% \item Branch:\\
+%% Separate local copy for bug fixing, testing.
+%% \item Diff/Change:\\
+%% Changes made in a file in two different versions.
+%% \item Merge (or patch):\\
+%% Appling the changes to file, to make it up-to-date.
+%% \item Conflict:\\
+%% When merging a file is not obvious.
+%% \item Resolve:\\
+%% Fixing the conflict manually.
+%% \end{itemize}
+%% \end{frame}
-\begin{frame}
- \frametitle{Common jargon: Basic setup}
- \begin{itemize}
- \item Repository(repo):\\
- The folder with all files.
- \item Server:\\
- Machine with main inventory/repo.
- \item Client:\\
- Local machines with copy of main repo.
- \end{itemize}
-\end{frame}
+%% % Types of Version Controls
+%% %% \section{Types of VCS}
+
+%% %% \begin{frame}
+%% %% \frametitle{Types:}
+%% %% Based on ways of managing the repo there are two types of VCS:
+%% %% \begin{itemize}
+%% %% \item Centralized VCS\\
+%% %% cvs, svn fall under this category.
+%% %% \item Distributed VCS\\
+%% %% hg, bzr, git follows this methodology.
+%% %% \end{itemize}
+%% %% \emphbar{We would be covering \typ{hg}}
+%% %% \end{frame}
\begin{frame}
- \frametitle{Actions}
- \begin{itemize}
- \item Add:\\
- Adding file into the repo for the first time.
- \item Version:\\
- Version number(Die Hard 4.0).
- \item Head/Tip:\\
- Most recent revision/stage.
- \item Check out/Clone:\\
- Initial download of working copy.
- \item Commit:\\
- Saving(recording) a change.
- \item Change log/History:\\
- List of all past changes.
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Actions cont...}
- \begin{itemize}
- \item Branch:\\
- Separate local copy for bug fixing, testing.
- \item Diff/Change:\\
- Changes made in a file in two different versions.
- \item Merge (or patch):\\
- Appling the changes to file, to make it up-to-date.
- \item Conflict:\\
- When merging a file is not obvious.
- \item Resolve:\\
- Fixing the conflict manually.
- \end{itemize}
-\end{frame}
-
-% Types of Version Controls
-\section{Types of VCS}
-
-\begin{frame}
- \frametitle{Types:}
- Based on ways of managing the repo there are two types of VCS:
- \begin{itemize}
- \item Centralized VCS\\
- cvs, svn fall under this category.
- \item Distributed VCS\\
- hg, bzr, git follows this methodology.
- \end{itemize}
- \emphbar{We would be covering \typ{hg}}
-\end{frame}
-
-\begin{frame}
- \frametitle{Why hg?}
- \includegraphics[height=.75in, interpolate=true]{mercurial}
+ \frametitle{We will cover hg?}
+ \includegraphics[height=.75in, interpolate=true]{mercurial}\\
+ Because it is:
\begin{itemize}
\item Easy to learn and use.
\item Lightweight.
\item Scales excellently.
\item Written in Python.
\end{itemize}
- \inctime{10}
+ \inctime{15}
\end{frame}
% Initializing the repo, cloning, committing changes, pushing, pulling to repo.
\section{Getting Started}
+\begin{frame}
+ \frametitle{Objective}
+ \begin{block}{}
+ We would \alert{manage} letters collaboratively using \typ{hg}.
+ \end{block}
+
+ %% \pause
+ %% \begin{block}{Disclaimer}
+ %% Please note, objective is not to learn creative writing, but to learn \alert{hg(mercurial)} via \alert{interesting} use case.
+ %% \end{block}
+\end{frame}
+
\begin{frame}[fragile]
\frametitle{Getting comfortable:}
- For checking \typ{hg} installation and its version try:
+ For checking \typ{hg} installation and its version type:
\begin{lstlisting}
$ hg version
\end{lstlisting}
@@ -293,22 +332,34 @@
\begin{frame}[fragile]
\frametitle{Getting working/existing code base}
- \typ{clone} is used to make a copy of an existing repository. It can be both local or remote.
+ To get a already existing code-base:
\begin{lstlisting}
$ hg clone
- http://hg.serpentine.com/tutorial/hello
- localCopyhello
+http://hg.serpentine.com/tutorial/hello
+localCopyhello
\end{lstlisting}
- And we get a local copy of this repository.
+\typ{localCopyhello} is copy of code-base.
\begin{lstlisting}
$ ls localCopyhello/
hello.c Makefile
\end{lstlisting}
\end{frame}
+%%introduction to clone, repo, server, client.
\begin{frame}[fragile]
- \frametitle{To start track-record on existing files}
- I have some files which I want to bring under version control. \typ{hg} provides \typ{init} command for this:
+ \frametitle{What did we do!}
+ \begin{block}{Explanation}
+ \begin{itemize}
+ \item<1-> \typ{hello} is a \alert{repo}, it's a collection of files and folders.
+ \item<2-> This repo is located on remote(\alert{server}) machine.
+ \item<3-> We copy(\alert{clone}) repo to our local machine.
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Creating repo of existing files}
+ I have some files which I want to bring under version control. \typ{hg} provides \alert{\typ{init}} command for this:
\begin{lstlisting}
$ ls -a circulate/
. .. lena.png pendulum.txt points.txt pos.txt sslc1.py sslc1.txt
@@ -324,15 +375,14 @@
\frametitle{Starting fresh}
We can use \typ{init} to start a new repository also
\begin{lstlisting}
-$ mkdir Fevicol
-$ cd Fevicol/
-$ echo "print 'Yeh Fevicol ka majboot
- jod hai'" > feviStick.py
+$ mkdir letter
+$ cd letter
+$ touch letter.tex
$ ls -a
-. .. feviStick.py
+. .. letter.tex
$ hg init
$ ls -a
-. .. feviStick.py .hg
+. .. letter.tex .hg
\end{lstlisting}
\end{frame}
@@ -345,14 +395,28 @@
2 files updated, 0 files merged,
0 files removed, 0 files unresolved
\end{lstlisting}
- or
+ \alert{or}
\begin{lstlisting}
-$ hg clone Fevicol Fevicol-pull
+$ hg clone letter letter-clone
updating working directory
0 files updated, 0 files merged,
-0 files removed, 0 files unresolved
- \end{lstlisting}
- \inctime{20}
+0 files removed, 0 files unresolved
+ \end{lstlisting}
+\end{frame}
+
+%%introduction to branch
+\begin{frame}[fragile]
+ \frametitle{Why do we need branching?}
+ \begin{block}{}
+ \begin{itemize}
+ \item To keep separate set for \alert{experimentation}.
+ \item Simple way to \alert{backup} all in one go!
+ \item It helps in collaborative environment.
+ %% should we mention it at all? there is no need to know atleast here.
+ %% syncing and integrating in backup files and testing environment can also be mentioned.
+ \end{itemize}
+ \end{block}
+ \inctime{15}
\end{frame}
%% Should we here stress on how are distribute VCS have
@@ -360,8 +424,8 @@
%% or some other graphical representation.
\begin{frame}[fragile]
\frametitle{Revisiting saved points:history/logs}
- In \typ{hg}, the difference between consecutive stages is termed as changeset.\\
- Once we have saved stages, we need a mechanism to review and access them, for that use \typ{log} command.
+ In \typ{hg}, the difference between consecutive stages is termed as \alert{changeset}.\\
+ Once we have saved stages, we need a mechanism to review and access them, for that use \alert{\typ{log}} command.
\begin{lstlisting}
$ cd localCopyhello
$ hg log
@@ -370,15 +434,17 @@
\begin{frame}[fragile]
\frametitle{Understanding output}
- The output provides following information:
+ It provides following information:
\begin{itemize}
- \item changeset: Identifiers for the changeset.
- \item user: Person who created the changeset.
- \item date: Date and time of creation of changeset.
- \item summary: One line description.
+ \item \alert{changeset}: Identifiers for the changeset.
+ \item \alert{user}: Person who created the changeset.
+ \item \alert{date}: Date and time of creation of changeset.
+ \item \alert{summary}: One line description.
\end{itemize}
\end{frame}
+%% here we should have image of dotA or halo for resuming from a stage in game.
+
\begin{frame}[fragile]
\frametitle{History/Logs cont...}
By default \typ{log} returns complete list of all changes. \\
@@ -397,56 +463,70 @@
\begin{frame}[fragile]
\frametitle{Advancing through a stage:status}
We often need to add/delete some files from directory(repo). The structure keeps on evolving, and tools for handling them are needed.\\
- We will use the Fevicol repo we created earlier.
+ We will use the \typ{letter} repo we created earlier.
\begin{lstlisting}
-$ cd Fevicol
+$ cd letter
$ hg log
$ hg st
-? feviStick.py
+? letter.tex
\end{lstlisting} %%$
- \typ{st} (aka status) is command to show changed files in the working directory.\\
+ \alert{\typ{st}} (aka status) is command to show changed files in the working directory.\\
\end{frame}
%% track record is confusing for some. Duma have some doubts :(
\begin{frame}[fragile]
\frametitle{Adding files}
- "?" indicates that these file are aliens to track record.\\
- \typ{add} command is available to add new files to present structure.
+ "?" indicates that this file are aliens to track record.\\
+ \alert{\typ{add}} command is available to add new files to present structure.
\begin{lstlisting}
-$ hg add feviStick.py
+$ hg add letter.tex
$ hg st
-A feviStick.py
+A letter.tex
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Saving present stage: committing}
\emphbar{This is equivalent to completing tasks, before reaching a stage where you want to save.}
- \typ{hg} uses \typ{ci}(aka \typ{commit}) command to save changes. So after adding file, we have to commit it also:
+ \typ{hg} uses \alert{\typ{ci}}(aka \typ{commit}) command to save changes. So after adding file, we have to commit it also:
\begin{lstlisting}
$ hg ci -u "Shantanu <shantanu@fossee.in>"
-m "First commit."
$ hg log
-changeset: 0:84f5e91f4de1
+changeset: 0:210664b4ed58
tag: tip
user: Shantanu <shantanu@fossee.in>
-date: Fri Aug 21 23:37:13 2009 +0530
-summary: First commit.
+date: Tue Feb 23 19:41:45 2010 +0530
+summary: First commit.
\end{lstlisting}
\end{frame}
+%% explanation of ci command??
+\begin{frame}[fragile]
+ \frametitle{\typ{ci} command}
+ Some arguments passed to \typ{ci} command are worth noticing:
+ \begin{itemize}
+ \item \alert{u}: To provide name and email contact information of person making changes!\\
+ In case you don't want to repeat that each time of committing, add info to \typ{hgrc} file.
+ \item<2-> \alert{m}: It is to provide one-line summary of changeset. \\
+ if this argument is not passed, hg takes you to editor to specify the message which is required to commit.
+ \end{itemize}
+\end{frame}
+
\begin{frame}[fragile]
\frametitle{Other operations}
\typ{hg} supports basic file-management functions like copy, remove, rename etc.
\begin{lstlisting}
-$ hg cp feviStick.py pidiLite.py
-$ hg rename pidiLite.py feviCol.py
+$ hg cp letter.tex letter-prof.tex
+$ hg rename letter.tex letter-personal.tex
$ hg st
-A feviCol.py
+A letter-personal.tex
+A letter-pro.tex
+R letter.tex
$ hg ci -u "Shantanu <shantanu@fossee.in>"
- -m "Added feviCol.py."
+ -m "Renamed and added letters."
$ hg tip| grep summary
-summary: Added feviCol.py.
+summary: Renamed and added letters.
\end{lstlisting} %$
%% Other commands which can be handy are \typ{remove}, \typ{revert} etc.
\inctime{10}
@@ -465,8 +545,9 @@
\end{itemize}
\end{itemize}
\begin{lstlisting}
+$ cd letter-clone
$ hg pull
-pulling from /home/baali/Fevicol
+pulling from /home/baali/letter
requesting all changes
adding changesets
adding manifests
@@ -478,48 +559,76 @@
\begin{frame}[fragile]
\frametitle{Pulling changesets cont...}
- \typ{pull} command doesn't update current directory, it just imports changesets. To add all these changes, use \typ{up}:
+ \alert{\typ{pull}} command doesn't update current directory, it just imports changesets. To add all these changes, use \alert{\typ{up}}:
\begin{lstlisting}
-$ cd Fevicol-pull
$ ls -a
. .. .hg
$ hg up
2 files updated, 0 files merged,
0 files removed, 0 files unresolved
$ ls -a
-. .. feviCol.py feviStick.py .hg
- \end{lstlisting}
+. .. .hg letter-personal.tex
+letter-pro.tex
+ \end{lstlisting} %% $
\pause
\emphbar{Why \typ{pull} and \typ{up} are needed separately?}
\end{frame}
\begin{frame}[fragile]
- \frametitle{Making changes across branches}
+ \frametitle{Content of letter}
+ Personal letter can be letter to ask a girl out!\\
+ Using LaTeX to write letter, it would be straight forward:
+
+ \begin{small}
+ \begin{block}{}
\begin{lstlisting}
-$ cd Fevicol-pull/
- \end{lstlisting} %$
- Lets edit and correct the feviStick.py
-\begin{lstlisting}
-$ echo "print 'Ab no more Chip Chip'"
- > feviStick.py
+\documentclass{letter}
+\begin{document}
+\begin{letter}{}
+\opening{Hello Jas,}
+I really enjoyed meeting you in CS 101,
+but would love to know you better.
+How about a coffee on Thursday after class?
+
+\closing{-Samarth}
+\end{letter}
+\end{document}
+
+ \end{lstlisting}
+ \end{block}
+ \end{small}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Sharing the changes!}
+ \begin{lstlisting}
$ hg st
-M feviStick.py
-\end{lstlisting}
- 'M' sign indicates that \typ{hg} has noticed change.\\
+M letter-personal.tex
+ \end{lstlisting} %%$
+ \alert{'M'} sign indicates that \typ{hg} has noticed change in that particular file.
\end{frame}
\begin{frame}[fragile]
\frametitle{Revisiting changes}
- To view changes made \typ{hg} provides \typ{diff}:
-\begin{lstlisting}
+ To view changes made \typ{hg} provides \alert{\typ{diff}}:
+ \begin{small}
+ \begin{lstlisting}
$ hg diff
-diff -r a7912d45f47c feviStick.py
---- a/feviStick.py Sun Aug 23 22:34:35 2009 +0530
-+++ b/feviStick.py Sun Aug 23 22:47:49 2009 +0530
-@@ -1,1 +1,1 @@
--print 'Yeh Fevicol ka Majboot jod hai'
-+print 'Ab no more Chip Chip'
+diff -r 4a2d973a92de letter-personal.tex
+--- a/letter-personal.tex Tue Feb 23 19:50:39 2010 +0530
++++ b/letter-personal.tex Tue Feb 23 20:28:46 2010 +0530
+@@ -0,0 +1,11 @@
++\documentclass{letter}
++\begin{document}
++
++\begin{letter}{}
++\opening{Hello Jas,}
++
++I really enjoyed meeting you in CS 101,
+.
+.
\end{lstlisting} %$
+ \end{small}
\end{frame}
\begin{frame}[fragile]
@@ -527,16 +636,16 @@
We have to commit these changes.
\begin{lstlisting}
$ hg ci -u "Shantanu <shantanu@fossee.in>"
- -m "Changed tagline for feviStick.py."
+ -m "Added content to personal letter."
\end{lstlisting} %$
\end{frame}
\begin{frame}[fragile]
\frametitle{Syncing two repos}
- To bring both the repos at same stage we have to \typ{push} differences.
+ To bring both the repos at same stage we have to \alert{\typ{push}} changesets
\begin{lstlisting}
$ hg push
-pushing to /home/baali/Fevicol
+pushing to /home/baali/letter
searching for changes
adding changesets
adding manifests
@@ -547,13 +656,14 @@
\begin{frame}[fragile]
\frametitle{Syncing cont...}
- Same as pulling, pushing wont update the main directory by default.
+ Same as \typ{pull}, \typ{push} wont update the main directory by default.
\begin{lstlisting}
-$ cd Fevicol
+$ cd letter
$ hg tip
-$ cat feviStick.py
- \end{lstlisting}
- \typ{tip} shows latest changeset, but content of file are not updated. We have to use \typ{up} on main branch
+$ cat letter-personal.tex
+ \end{lstlisting} %%$
+ \alert{\typ{tip}} shows latest changeset, but content of file are not updated.\\
+ We have to use \typ{up} on main branch
\begin{lstlisting}
$ hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -570,35 +680,71 @@
\end{center}
\end{frame}
+\begin{frame}
+ \frametitle{Scenario cont...}
+ \begin{block}{}
+ \begin{itemize}
+ \item To make this letter better, I ask for suggestions.
+ \item Friend of mine, clones this repo and edit things.
+ \item When he/she pushes changes, I can decide to use them or not.
+ \end{itemize}
+ \end{block}
+\end{frame}
+
\begin{frame}[fragile]
- \frametitle{Making changes to one of repo}
+ \frametitle{Creating more clones for sharing}
+ I create a clone of repo which is accessible to my friend.
\begin{lstlisting}
-$ cd Fevicol-pull
-$ echo "print 'Yeh Fevicol ka Majboot jod
- hai, tootega nahin'" > feviCol.py
-$ hg st
-M feviStick.py
-$ hg ci -u "Shantanu <shantanu@fossee.in>"
- -m "Updated tag line for feviCol.py."
-$ hg tip| grep changeset
-changeset: 3:caf986b15e05
+$ hg clone letter letter-suggestion
+updating working directory
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
\end{lstlisting} %$
\end{frame}
+%% here we can have introduction to concept of DVCS and CVCS?
+
\begin{frame}[fragile]
- \frametitle{In the meanwhile, other repo is ...}
+ \frametitle{Suggestions!}
+ He is convinced that using some colored text would be a good idea.
+ He just adds color to closing part.
+ %% a comment on how bad is this idea :P
+ \begin{small}
\begin{lstlisting}
-$ cd Fevicol
-$ echo "print 'Jor laga ke hayyiya'"
- > firstAdd.py
-$ hg add
-$ hg st
-A firstAdd.py
+$ hg dif
+diff -r 4a2d973a92de letter-personal.tex
+--- a/letter-personal.tex Tue Feb 23 19:50:39 2010 +0530
++++ b/letter-personal.tex Wed Feb 24 12:03:33 2010 +0530
+@@ -0,0 +1,12 @@
+ \documentclass{letter}
++\usepackage{color}
+ \begin{document}
+.
+-\closing{-Samarth}
++\closing{\textcolor{red}{-Samarth}}
+ \end{lstlisting} %%$
+ \end{small}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Committing the changes}
+ He is satisfied with his minor changes, so he commits.
+ \begin{lstlisting}
+$ hg ci
+ -u "Vattam <vattam@fossee.in>"
+ -m "Added some suggestions."
+ \end{lstlisting} %%$
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{The other good half of repo...}
+ It turns out, in this process, Jas is already dating, so we edit the letter for someone else from same class.
+ \begin{lstlisting}
$ hg ci -u "Shantanu <shantanu@fossee.in>"
- -m "Added firsAdd.py."
+ -m "Changed name."
$ hg tip|grep changeset
changeset: 3:fadbd6492cc4
\end{lstlisting}
+ %%\emphbar{\alert{moral:} Don't wait for it!}
\end{frame}
%%\hspace*{-0.5in}
@@ -608,11 +754,11 @@
\begin{columns}
\column{0.5\textwidth}
\begin{block}{\center{main directory}}
- \includegraphics[height=2in, interpolate=true]{main}
+ \includegraphics[height=2in, interpolate=true]{glog-main}
\end{block}
\column{0.5\textwidth}
\begin{block}{\center{cloned directory}}
- \includegraphics[height=2in, interpolate=true]{clone}
+ \includegraphics[height=2in, interpolate=true]{glog-suggestion}
\end{block}
\end{columns}
\end{frame}
@@ -621,8 +767,8 @@
\frametitle{Merging}
\emphbar{Lets sync both these branches!}
\begin{lstlisting}
-$ hg pull ../Fevicol-pull
-pulling from ../Fevicol-pull
+$ hg pull ../letter-suggestion
+pulling from ../letter-suggestion
searching for changes
adding changesets
adding manifests
@@ -632,7 +778,8 @@
\end{lstlisting} %$
\begin{itemize}
\item \typ{pull} can be done from a branch explicitly also.
- \item Output is already suggesting something!
+ \pause
+ \item \alert{Output is already suggesting something!}
\end{itemize}
\end{frame}
@@ -642,18 +789,18 @@
Since hg \typ{pull} don't update the files directly, our changes are still safe. \typ{hg} provides some commands to help understand such problems.
\begin{tiny}
\begin{lstlisting}
-$ hg heads
-changeset: 4:c5f40fda69cf
+$ hg heads
+changeset: 4:71fd776d856b
tag: tip
-parent: 2:0b8286c48e88
-user: Shantanu <shantanuc@fosse.in>
-date: Fri Jan 22 19:43:46 2010 +0530
-summary: Updated tagline for feviCol.py.
+parent: 2:a5d8cb2fac01
+user: Vattam <vattam@fossee.in>
+date: Wed Feb 24 12:54:31 2010 +0530
+summary: Added some suggestions.
-changeset: 3:60edf0e499e7
-user: Shantanu <shantanuc@fosse.in>
-date: Fri Jan 22 19:47:58 2010 +0530
-summary: Added firstAdd.py.
+changeset: 3:02b49a53063f
+user: Shantanu <Shantanu@fossee.in>
+date: Wed Feb 24 13:12:26 2010 +0530
+summary: Changed name.
\end{lstlisting} %%$
\end{tiny}
It shows current repository heads or show branch head
@@ -665,7 +812,7 @@
$ hg glog
\end{lstlisting} %%$
\begin{center}
- \includegraphics[height=2in]{glog}
+ \includegraphics[height=2in]{heads}
\end{center}
It shows history alongside an ASCII revision graph.
\end{frame}
@@ -675,13 +822,14 @@
Because of different 'pasts', \typ{up} command fails.
\begin{lstlisting}
$ hg up
-abort: crosses branches (use 'hg merge' or 'hg update -C')
+abort: crosses branches (use 'hg merge'
+ or 'hg update -C')
\end{lstlisting} %$
\end{frame}
\begin{frame}[fragile]
\frametitle{Merging}
- To deal such situations \typ{hg merge} command merge working directory with another revision.
+ To deal such situations \typ{hg} \alert{merge} command merge working directory with another revision.
\begin{lstlisting}
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -703,6 +851,17 @@
\end{frame}
\begin{frame}[fragile]
+ \frametitle{Revisiting history!}
+ In case earlier girl is available again and you are still looking for date you can \alert{revert} back to previous letter!
+ \begin{lstlisting}
+$ hg revert -r 2 -a
+reverting letter-personal.tex
+ \end{lstlisting} %%$
+ And the content changes. From here on you can further change your letter as you wish.
+ %% more options for revert are to explained here!
+\end{frame}
+
+\begin{frame}[fragile]
\frametitle{More information}
\begin{itemize}
\item \typ{merge} fails if there are conflicting changes.
@@ -710,13 +869,18 @@
\item Like two persons editing same file, same line and pushing it upstream.
\end{itemize}
\item In conflicts, one have to perform \typ{merge} manually.
- \item \typ{hg} provides \typ{incoming} command, which checks the would-be imported changes
+ \item \typ{hg} provides \alert{\typ{incoming}} command, which checks the would-be imported changes
\begin{itemize}
\item To avoid conflicting changes before importing.
\end{itemize}
\end{itemize}
+ \inctime{10}
\end{frame}
+%% Manual and force merge
+%% hgignore
+
+%% Reverting to previous versions!
% Steps to follow to make life easier. How to avoid/handle manual merges.
\section{Work flow: DOS and DON'Ts}
@@ -728,14 +892,7 @@
\end{frame}
\begin{frame}
- \frametitle{Cheat Sheet}
- \begin{center}
- \includegraphics[height=2.8in]{mod}
- \end{center}
-\end{frame}
-
-\begin{frame}
- \frametitle{Steps to be followed}
+ \frametitle{Work-flow}
\begin{itemize}
\item Make changes.
\item Commit.
@@ -743,7 +900,40 @@
\item Merge(if required).
\item Push.
\end{itemize}
- \inctime{20}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Cheat Sheet}
+ \begin{center}
+ \includegraphics[height=2.8in]{mod}
+ \end{center}
+ \inctime{15}
+\end{frame}
+
+%% Move it to end of session. Once introduction part is
+%% over. Then mentioning about options and utility.
+\section{Use case and Options}
+
+\begin{frame}
+ \frametitle{Use cases}
+ \emphbar{For team of people working remotely(even different computers/machines) on a project, use of version control is inevitable!}
+ \vspace{0.15in}
+ \emphbar{For single person: managing projects and assignments becomes easy}
+ \vspace{0.15in}
+ \pause
+ \emphbar{\color{red}{It is a good habit!}}
+\end{frame}
+
+\begin{frame}
+ \frametitle{What are other options!}
+ \begin{itemize}
+ \item cvs (Concurrent Version System)
+ \item svn (Subversion)
+ \item hg (Mercurial)
+ \item bzr (Bazaar)
+ \item git
+ \end{itemize}
+ \inctime{5}
\end{frame}
\begin{frame}
@@ -760,6 +950,10 @@
\end{frame}
\end{document}
+Some more suggestions from Nishanth:
+revert
+resolve
+
Notes
-----