--------------------------------- Version Control using Hg Part I --------------------------------- .. Prerequisites .. ------------- .. None .. Author : Primal Pappachan Internal Reviewer : Kiran Isukapatla Date: Jan 27, 2012 ---------------------- Spoken Tutorial Script ---------------------- +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the first part of tutorial on 'Version Control | | with the logo of MHRD}}}* | using Hg' | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide containing the objectives}}}* | At the end of this tutorial you will be able to | | | | | | 1. Understand what is Version Control | | | #. Identify the need for using Version Control | | | #. Install Mercurial and intialize a repository | | | | | | | | | First, let's understand what 'Version Control' is. | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'what is version control'}}*} | 'Version control' is a way to track files over time and share them. This allows | | | access to earlier versions of a file(s) if and when required. It therefore | | | enables us to make changes to the content of a file, view it's change log and | | | collaborate on a single piece of work with a team of people. | | | | | | As the quote from the famous blog post 'Version Control for masses' says | | | | | | "Version control is one of those weird, geeky things that never really gained | | | much ground in non-geek fields, despite the fact that it’s blindingly useful." | | | | | | Over the course of these 3 spoken tutorials, we are going to see a handful of | | | such things, which are widely used in the programmer world, but not so much in | | | the scientific computing world, even when if they would be very useful. | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'Home-brewed'}}}* | Let's look at an example of home-brewed Version Control system | | | | | | Version control is a way of backing up files, before making changes. Most | | | people would have cooked up their own version control system, without | | | realizing, there were tools built by others, that performs the task in a more | | | organized and systematic way. | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'Problems'}}}* | Let's look at the various problems associated with this set-up. | | | | | | 1. Name and changes made are not related or linked. | | | #. Can't track sequence of changes made to a file | | | #. Does not scale | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'The need for Version Control'}}}* | Having seen the problems of a home brewed setup, let's now move onto | | | identifying the needs for a 'Version Control System'. | | | | | | 1. To err is Human . . . | | | #. Tracking the history and evolution of a project | | | #. To collaborate effectively on a project | | | #. To efficiently track down bugs and pin-point the | | | #. changes that caused it | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'The need for Version Control'}}}* | We have seen that one of the main motivations to use a Version Control system | | | is the ability to go back to a working version of a file, when something goes | | | wrong. Below are a few more advantages of using an automated version control | | | system. | | | | | | 1. By tracking the history of a project, any person may see the evolution of a p | | | 2. Allows for effective collaboration on a project, as everything is shared. | | | 3. Helps to identify which additions have broken down a project and thus aids in | | | 4. It is good for a one man show as it is for a big group of people working on a | | | | | | Keeping your stuff version controlled will help avoid accidental deletion of | | | individual files etc. Hosting it on a remote server will protect your sanity | | | from a hard disk crash. | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'How does it work? - Analogy}}}* | It is, in some ways, similar to playing a video game. We generally play games | | | in stages. While playing, we save the game at some instances as per our choice. | | | We continue playing, but we could, if necessary, choose to go back to one of | | | the saved states and start over. In this manner, we could change the course of | | | the game. | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the slide 'Mercurial or hg'}}}* | Some of the Version Control tools available and used widely are: | | | | | | 1. cvs(Concurrent Version Systems) | | | #. svn(subversion) | | | #. hg(mercurial) | | | #. git | | | | | | | | | Each of these tools have their own merits and demerits. In this tutorial we | | | shall learn how to use mercurial or hg which is easy to learn and use and | | | comparatively light weight. Once you learn how to use hg, you can easily try | | | other tools and switch to one that you feel most comfortable with. | | | | | | Let's now get into Installation. For Linux distributions, Ubuntu and Debian | | | type the following in command line terminal | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | ``sudo apt-get install mercurial`` | For Windows, | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | ``http://mercurial.selenic.com/downloads/`` | | | | | | ``http://hgbook.red-bean.com/read/a-tour-of-mercurial-the-basics.html`` | | | | | | .. R 11 | | | | | | For any other Operating system, please refer the hg book for installation | | | instruction - | | | | | | Type 'hg' which lists out all the commands | | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | ``$hg`` | and 'hg version' which gives the version number. | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | ``$hg version`` | This brings us to the end of the tutorial. In this tutorial, we have | | | seen, | | | | | *{{{Show the 'summary' slide'}}}* | 1. the motivation to use version control | | | #. an analogy of version control with playing a video game | | | #. how to check if mercurial is installed, and it's version using hg version | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show self assessment questions slide}}}* | Here are some self assessment questions for you to solve | | | | | | 1. Is Mercurial a Centralized VCS or Distributed VCS? Justify your reasoning. | | | #. How can you verify whether Mercurial has been installed properly? | | | #. What is the command for accessing built-in help system of Mercurial? | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the solutions slide to self assessment questions }}}* | And the answers, | | | | | | 1. Mercurial is a Centralized Version Control system. To read more go here, htt | | | #. $hg version | | | #. $hg help command | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ | *{{{Show the thank you slide}}}* | Hope you have enjoyed this tutorial and found it useful. Feel free to play | | | around with Mercurial and read the documentation given by hg help command. When | | | you are ready to move on, please proceed to the second tutorial on 'Version | | | Control using Hg' | | | | | | Thank you | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+