%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Version Control Systems % % Author: FOSSEE % Copyright (c) 2009, FOSSEE, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[12pt,compress]{beamer} \mode { \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}