Introduction to Mercurial

Post on 17-May-2015

4.453 views 0 download

Tags:

description

A short talk on Mercurial i gave at Barcamp Scotland 2008

Transcript of Introduction to Mercurial

Barcamp Scotland 2008Introduction to Mercurial

How to improve your source control.

Tane Piperdigitalspaghetti@gmail.com

http://digitalspaghetti.me.ukhttp://twitter.com/tanepiper

February 2nd, 2008

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Introduction

What Is Covered?

A (Short) History of Source Control

Distributed Source Control

Mercurial itself

How to import your project

Download from http://tinyurl.com/2spv4h

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Introduction

What Is Covered?

A (Short) History of Source Control

Distributed Source Control

Mercurial itself

How to import your project

Download from http://tinyurl.com/2spv4h

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Introduction

What Is Covered?

A (Short) History of Source Control

Distributed Source Control

Mercurial itself

How to import your project

Download from http://tinyurl.com/2spv4h

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Introduction

What Is Covered?

A (Short) History of Source Control

Distributed Source Control

Mercurial itself

How to import your project

Download from http://tinyurl.com/2spv4h

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Introduction

What Is Covered?

A (Short) History of Source Control

Distributed Source Control

Mercurial itself

How to import your project

Download from http://tinyurl.com/2spv4h

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control I

SCCS (Source Code Control System)Marc Rochkind wrote at Bell Labs, in the early 1970s.

SCCS operated on individual files and every author had accessto a shared workspace on a single system.

It was common for people to lock files, and later forget tounlock them, preventing anyone else from modifying thosefiles without the help of an administrator.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control I

SCCS (Source Code Control System)Marc Rochkind wrote at Bell Labs, in the early 1970s.

SCCS operated on individual files and every author had accessto a shared workspace on a single system.

It was common for people to lock files, and later forget tounlock them, preventing anyone else from modifying thosefiles without the help of an administrator.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control I

SCCS (Source Code Control System)Marc Rochkind wrote at Bell Labs, in the early 1970s.

SCCS operated on individual files and every author had accessto a shared workspace on a single system.

It was common for people to lock files, and later forget tounlock them, preventing anyone else from modifying thosefiles without the help of an administrator.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control II

Dick Grune developed CVS (Concurrent Versions System).

CVS let developers work simultaneously and somewhatindependently in their own personal workspaces.

They had to merge their edits prior to committing changes tothe central repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control II

Dick Grune developed CVS (Concurrent Versions System).

CVS let developers work simultaneously and somewhatindependently in their own personal workspaces.

They had to merge their edits prior to committing changes tothe central repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control II

Dick Grune developed CVS (Concurrent Versions System).

CVS let developers work simultaneously and somewhatindependently in their own personal workspaces.

They had to merge their edits prior to committing changes tothe central repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control III

In 2001 Jim Blandy and Karl Fogel developed Subversion.

Subversion, does not stray from CVS’s centralisedclient/server model.

Added features such as multi-file atomic commits and betternamespace management.

At the same time Graydon Hoare was working on Monotone.

Featured cryptographic hashes as identifiers, and has anintegral notion of ”trust” for code from different sources.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control III

In 2001 Jim Blandy and Karl Fogel developed Subversion.

Subversion, does not stray from CVS’s centralisedclient/server model.

Added features such as multi-file atomic commits and betternamespace management.

At the same time Graydon Hoare was working on Monotone.

Featured cryptographic hashes as identifiers, and has anintegral notion of ”trust” for code from different sources.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control III

In 2001 Jim Blandy and Karl Fogel developed Subversion.

Subversion, does not stray from CVS’s centralisedclient/server model.

Added features such as multi-file atomic commits and betternamespace management.

At the same time Graydon Hoare was working on Monotone.

Featured cryptographic hashes as identifiers, and has anintegral notion of ”trust” for code from different sources.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control III

In 2001 Jim Blandy and Karl Fogel developed Subversion.

Subversion, does not stray from CVS’s centralisedclient/server model.

Added features such as multi-file atomic commits and betternamespace management.

At the same time Graydon Hoare was working on Monotone.

Featured cryptographic hashes as identifiers, and has anintegral notion of ”trust” for code from different sources.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

A (Short) History of Source Control III

In 2001 Jim Blandy and Karl Fogel developed Subversion.

Subversion, does not stray from CVS’s centralisedclient/server model.

Added features such as multi-file atomic commits and betternamespace management.

At the same time Graydon Hoare was working on Monotone.

Featured cryptographic hashes as identifiers, and has anintegral notion of ”trust” for code from different sources.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Distributed Version Control

What is Distributed Version Control?

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Distributed Version Control (DVCS)

Both git and Mercurial were announced in April 2005 toreplace the withdrawal of free BitKeeper VC software, whichwas used to control the Linux kernel.

git developed by Linus Torvalds to manage the Linux kernel.

Mercurial was also developed for kernel, but git won out.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Distributed Version Control (DVCS)

Both git and Mercurial were announced in April 2005 toreplace the withdrawal of free BitKeeper VC software, whichwas used to control the Linux kernel.

git developed by Linus Torvalds to manage the Linux kernel.

Mercurial was also developed for kernel, but git won out.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Distributed Version Control (DVCS)

Both git and Mercurial were announced in April 2005 toreplace the withdrawal of free BitKeeper VC software, whichwas used to control the Linux kernel.

git developed by Linus Torvalds to manage the Linux kernel.

Mercurial was also developed for kernel, but git won out.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

An Example of the DVCS Model

Figure: An example of the Mercurial distributed model.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Simple description of the DVCS model

No repository is king - no ”central” repository except for oneagreed in a social fashion.

Can be thought of as ”the bittorrent of the DVCS world”,compaired to CVS/SVN model which is akin to a FTP.

Cloning repositories locally allows for more experimentation.

As simple to set up as typing ’hg init’.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Simple description of the DVCS model

No repository is king - no ”central” repository except for oneagreed in a social fashion.

Can be thought of as ”the bittorrent of the DVCS world”,compaired to CVS/SVN model which is akin to a FTP.

Cloning repositories locally allows for more experimentation.

As simple to set up as typing ’hg init’.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Simple description of the DVCS model

No repository is king - no ”central” repository except for oneagreed in a social fashion.

Can be thought of as ”the bittorrent of the DVCS world”,compaired to CVS/SVN model which is akin to a FTP.

Cloning repositories locally allows for more experimentation.

As simple to set up as typing ’hg init’.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Simple description of the DVCS model

No repository is king - no ”central” repository except for oneagreed in a social fashion.

Can be thought of as ”the bittorrent of the DVCS world”,compaired to CVS/SVN model which is akin to a FTP.

Cloning repositories locally allows for more experimentation.

As simple to set up as typing ’hg init’.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Itself

Excellent support on Windows / Unix / MacOSX

Tools such as TortoiseHG for Windows, QCT, Push Me PullYou, etc make usage easy.

Functionality can be added through an extension API withhooks (e.g. pre and post commit).

Doesn’t pollute the namespace - keeps everything in one’.hg’ directory.

Provides it’s own web interface - hgweb (hgwebdir for acollection of repositories).

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Itself

Excellent support on Windows / Unix / MacOSX

Tools such as TortoiseHG for Windows, QCT, Push Me PullYou, etc make usage easy.

Functionality can be added through an extension API withhooks (e.g. pre and post commit).

Doesn’t pollute the namespace - keeps everything in one’.hg’ directory.

Provides it’s own web interface - hgweb (hgwebdir for acollection of repositories).

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Itself

Excellent support on Windows / Unix / MacOSX

Tools such as TortoiseHG for Windows, QCT, Push Me PullYou, etc make usage easy.

Functionality can be added through an extension API withhooks (e.g. pre and post commit).

Doesn’t pollute the namespace - keeps everything in one’.hg’ directory.

Provides it’s own web interface - hgweb (hgwebdir for acollection of repositories).

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Itself

Excellent support on Windows / Unix / MacOSX

Tools such as TortoiseHG for Windows, QCT, Push Me PullYou, etc make usage easy.

Functionality can be added through an extension API withhooks (e.g. pre and post commit).

Doesn’t pollute the namespace - keeps everything in one’.hg’ directory.

Provides it’s own web interface - hgweb (hgwebdir for acollection of repositories).

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Itself

Excellent support on Windows / Unix / MacOSX

Tools such as TortoiseHG for Windows, QCT, Push Me PullYou, etc make usage easy.

Functionality can be added through an extension API withhooks (e.g. pre and post commit).

Doesn’t pollute the namespace - keeps everything in one’.hg’ directory.

Provides it’s own web interface - hgweb (hgwebdir for acollection of repositories).

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands I

’hg init <name>’ - This initialises the local repository. Youcan do this command within the root folder too.

’hg add’ - This will add any files within the directorystructure to the local repository.

’hg commit’ - This will commit any changes to your localrepository.

’hg push’ - This will push any changes to your repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands I

’hg init <name>’ - This initialises the local repository. Youcan do this command within the root folder too.

’hg add’ - This will add any files within the directorystructure to the local repository.

’hg commit’ - This will commit any changes to your localrepository.

’hg push’ - This will push any changes to your repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands I

’hg init <name>’ - This initialises the local repository. Youcan do this command within the root folder too.

’hg add’ - This will add any files within the directorystructure to the local repository.

’hg commit’ - This will commit any changes to your localrepository.

’hg push’ - This will push any changes to your repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands I

’hg init <name>’ - This initialises the local repository. Youcan do this command within the root folder too.

’hg add’ - This will add any files within the directorystructure to the local repository.

’hg commit’ - This will commit any changes to your localrepository.

’hg push’ - This will push any changes to your repository.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands II

’hg pull’ - This will pull the content to your localrepository from the remote repository set in the config file.

’hg update’ - Updates and merges pulls to local repositorywhere no heads are created (i.e. if you have made no localchanges since your last pull).

’hg merge’ - This will merge any heads created bypushing/pulling from repositories.

’hg log’ - View a list of changesets.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands II

’hg pull’ - This will pull the content to your localrepository from the remote repository set in the config file.

’hg update’ - Updates and merges pulls to local repositorywhere no heads are created (i.e. if you have made no localchanges since your last pull).

’hg merge’ - This will merge any heads created bypushing/pulling from repositories.

’hg log’ - View a list of changesets.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands II

’hg pull’ - This will pull the content to your localrepository from the remote repository set in the config file.

’hg update’ - Updates and merges pulls to local repositorywhere no heads are created (i.e. if you have made no localchanges since your last pull).

’hg merge’ - This will merge any heads created bypushing/pulling from repositories.

’hg log’ - View a list of changesets.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Mercurial Commands II

’hg pull’ - This will pull the content to your localrepository from the remote repository set in the config file.

’hg update’ - Updates and merges pulls to local repositorywhere no heads are created (i.e. if you have made no localchanges since your last pull).

’hg merge’ - This will merge any heads created bypushing/pulling from repositories.

’hg log’ - View a list of changesets.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

How Mercurial Changesets Work

Figure: A example of linear changesets. This is very common inrepositories from one developer and once branch.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Simultaneous Local Changesets

Figure: Two local repositories with different changeset histories.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Results of pulling a changeset into your local repository.

Figure: Pulling a remote repository’s tip into your local repository creates2 heads. These need to be merged before you can continue.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Results of merging heads.

Figure: Merging the two heads together creates a new head. This cannow be pushed or pulled to other repositories and merged with otherheads.

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Thank you for listning.

Check out more about Mercurial at http://tinyurl.com/3xphcz

SHAMELESS PLUG - Follow the progress of MercurialFrontend at http://digitalspaghetti.me.uk

Comments welcome at digitalspaghetti@gmail.com

You can download these slides fromhttp://hg.digitalspaghetti.me.uk/hgtalk

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Thank you for listning.

Check out more about Mercurial at http://tinyurl.com/3xphcz

SHAMELESS PLUG - Follow the progress of MercurialFrontend at http://digitalspaghetti.me.uk

Comments welcome at digitalspaghetti@gmail.com

You can download these slides fromhttp://hg.digitalspaghetti.me.uk/hgtalk

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Thank you for listning.

Check out more about Mercurial at http://tinyurl.com/3xphcz

SHAMELESS PLUG - Follow the progress of MercurialFrontend at http://digitalspaghetti.me.uk

Comments welcome at digitalspaghetti@gmail.com

You can download these slides fromhttp://hg.digitalspaghetti.me.uk/hgtalk

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial

Thank you for listning.

Check out more about Mercurial at http://tinyurl.com/3xphcz

SHAMELESS PLUG - Follow the progress of MercurialFrontend at http://digitalspaghetti.me.uk

Comments welcome at digitalspaghetti@gmail.com

You can download these slides fromhttp://hg.digitalspaghetti.me.uk/hgtalk

Tane Piper digitalspaghetti@gmail.com Introduction to Mercurial