SlideShare a Scribd company logo
Git vs. Mercurial




Marian Marinov
System Architect at Siteground.com
Git vs. Mercurial
Git vs. Mercurial
Git vs. Mercurial
1. Evolution of revision control systems
* RCS -> CVS -> SVN
* Single repository for the history
* Working copy of a file
* Only one developer can commit at a time
* Complicated merges


   RCS/CVS/SVN ARE YOUR
              ENEMY
2. Distributed version control systems(DVCS)
 * Locally accessible history
 * Every developer can commit at will
 * Every client can become a server (no single
server required)
 * Seamless merges
3. Basic repository models
 * Shared repository       Top repository


    clone 1


                  clone 2
                                                clone 4
                                clone 3


* Distributed repository                   Repository
                             Repository
   Repository
                                               Repository
                            Repository

              Repository                  Repository

* Access polices
Centralized Workflow
                           shared
                         repository




           developer




             developer



                         developer
Integration-Manager Workflow
         Project's     Developer    Developer   Developer
        repository      public       public      public




Integration
 manager




                     Developer     Developer    Developer
                      private       private      private
Dictator Workflow

                                                       kernel.org

                                  Sub tree
                                 maintainer

                 Sub tree
                maintainer
 Sub tree
maintainer


                                                               developer



                                                   developer
                                       developer
             developer    developer
developer
Dictator Workflow

                                                       kernel.org

                                  Sub tree
                                 maintainer

                 Sub tree
                maintainer
 Sub tree
maintainer


                                                               developer



                                                   developer
                                       developer
             developer    developer
developer
4. Basic work
  * init
  * add
  * commit
  * mv / rename
  * rm vs. remove
  * log
  * diff
  * grep
  * clone
  * push
  * pull
  * branch & checkout
  * blame vs. annotate
Basic performance info
init
[root@Beast git]# time git init
Initialized empty Git repository in .git/

real 0m0.129s
user 0m0.000s
sys  0m0.000s

[root@Beast hg]# time hg init

real 0m0.204s
user 0m0.020s
sys   0m0.010s
[root@Beast hg]#
add
[root@Beast git]# time git add file0

real 0m0.016s
user 0m0.000s
sys  0m0.000s

[root@Beast hg]# time hg add file0

real 0m0.098s
user 0m0.030s
sys  0m0.010s
Git vs. Mercurial
status
[root@Beast git]# time git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be
committed)
#
#      file0
nothing added to commit but untracked files present
(use "git add" to track)

real 0m0.034s
user 0m0.000s
sys  0m0.000s
status


[root@Beast hg]# time hg status
? file0

real   0m0.028s
user   0m0.010s
sys    0m0.010s
commit

[root@Beast git]# time git commit -m
'added file0' file0
Created initial commit 43bb00d: added file0
 1 files changed, 1 insertions(+), 0
deletions(-)
 create mode 100644 file0

real 0m0.047s
user 0m0.000s
sys  0m0.000s
commit


[root@Beast hg]# time hg commit -m
'added file0' file0
No username found, using
'root@Beast.yuhu.biz' instead

real 0m0.218s
user 0m0.030s
sys  0m0.000s
Git vs. Mercurial
status


[root@Beast hg]# hg status

[root@Beast git]# git status
# On branch master
nothing to commit (working directory clean)
move
move
[root@Beast git]# git mv file0 file1
[root@Beast git]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to
unstage)
#
#       renamed: file0 -> file1
#
[root@Beast git]# git commit -m 'renamed
file0' file1
Created commit 077d7a3: renamed file0
 1 files changed, 1 insertions(+), 0
deletions(-)
 create mode 100644 file1
move

[root@Beast git]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#       deleted: file0
#
[root@Beast git]# git commit -m 'removed
file0' file0
Created commit dfa8fb4: removed file0
 1 files changed, 0 insertions(+), 1 deletions(-)
 delete mode 100644 file0
move

[root@Beast hg]# hg rename file0 file1
[root@Beast hg]# hg status
A file1
R file0
[root@Beast hg]# hg commit -m 'renamed
file0 to file1' file1
[root@Beast hg]# hg status
R file0
[root@Beast hg]# hg commit -m 'removed
file0' file0
[root@Beast hg]# hg status
rm
rm


[root@Beast hg]# hg remove new1
[root@Beast hg]# hg status
R new1
[root@Beast hg]# hg commit -m
'removed new1' new1
[root@Beast hg]# hg status
[root@Beast hg]#
[root@Beast git]# git rm file1
rm 'file1'
[root@Beast git]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#       deleted: file1
#
[root@Beast git]# git commit -m 'rm file1' file1
Created commit d47d595: removed file1
 1 files changed, 0 insertions(+), 1 deletions(-)
 delete mode 100644 file1
[root@Beast git]# git status
# On branch master
nothing to commit (working directory clean)
LOG
$ hg l og
changeset :
t ag:
                     4: 2278160e78d4
                     ti p
                                                  the hg way
user :               Br yan O' Sul l i van <  bos@ pent i ne. com
                                                  ser               >
dat e:               Sat Aug 16 22: 16: 53 2008 +      0200
sum ar y:
     m               Tr i m com ent s.
                                m
changeset :          3: 0272e0d5a517
user :               Br yan O' Sul l i van <  bos@ pent i ne. com
                                                  ser               >
dat e:               Sat Aug 16 22: 08: 02 2008 +      0200
sum ar y:
     m               Get m   ake t o gener at e t he f i nal bi nar y
f r om a . o f i   l e.
changeset :          2: f ef 857204a0c
user :               Br yan O' Sul l i van <  bos@ pent i ne. com
                                                  ser               >
dat e:               Sat Aug 16 22: 05: 04 2008 +      0200
sum ar y:
     m               I nt r oduce a t ypo i nt o hel l o. c.
changeset :          1: 82e55d328c8c
user :               m @ eni c. com
                       pm sel
dat e:               Fr i Aug 26 01: 21: 28 2005 - 0700
sum ar y:
     m               Cr eat e a m  akef i l e
changeset :          0: 0a04b987be5a
user :               m @ eni c. com
                       pm sel
dat e:               Fr i Aug 26 01: 20: 50 2005 - 0700
sum ar y:
     m               Cr eat e a st andar d " hel l o, w l d" pr ogr am
                                                         or
the hg way
$ hg log -r 3
changeset:    3:0272e0d5a517
user:        Bryan O'Sullivan <bos@serpentine.com>
date:        Sat Aug 16 22:08:02 2008 +0200
summary:      Get make to generate the final binary from a .o file.

$ hg log -r 0272e0d5a517
changeset:    3:0272e0d5a517
user:        Bryan O'Sullivan <bos@serpentine.com>
date:        Sat Aug 16 22:08:02 2008 +0200
summary:      Get make to generate the final binary from a .o file.

$ hg log -r 1 -r 4
$ hg log -r 2:4
$ hg log -v -p -r 2
$ gi t l og                         the git way
com i t ca82a6df f 817ec66f 44342007202690a93763949
   m
Aut hor : Scot t Chacon < schacon@ gee- m l . com
                                         ai      >
Dat e:    Mon M ar 17 21: 52: 11 2008 - 0700

    changed t he ver si on number

com i t 085bb3bcb608e1e8451d4b2432f 8ecbe6306e7e7
    m
Aut hor : Scot t Chacon < schacon@ gee- m l . com
                                         ai      >
Dat e:    Sat M ar 15 16: 40: 33 2008 - 0700

    r emoved unnecessar y t est code

com i t a11bef 06a3f 659402f e7563abf 99ad00de2209e6
    m
Aut hor : Scot t Chacon < schacon@ gee- m l . com
                                         ai      >
Dat e:    Sat M ar 15 10: 31: 28 2008 - 0700

    f i r st com i t
                m
$ gi t l og   m er ~
               ast  2
$ gi t l og   m er ~ . m er ~
               ast  2. ast   4
$ gi t l og   m er ^ 1 = gi t l og
               ast  1^  =
m er ~
 ast     2
$ gi t l og   m er ^
                ast      2
$ gi t l og   -p
$ gi t l og   – si nce= w2. eeks
$ gi t l og   - - col or           the git way
diff
[ r oot @Beast gi t ] # cat f i l e1
l i ne1
[ r oot @Beast gi t ] # echo ' l i ne2' >>
f i l e1
[ r oot @Beast gi t ] # gi t di f f
di f f - - gi t a/ f i l e1 b/ f i l e1
i ndex a29bdeb. . c0d0f b4 100644
- - - a/ f i l e1
+ + b/ f i l e1
  +
@ -1 + 2 @
  @        1,     @
  l i ne1
+ i ne2
  l
[ r oot @Beast hg] # cat f i l e1
l i ne1
[ r oot @Beast hg] # echo ' l i ne2' >>
f i l e1
[ r oot @Beast hg] # hg di f f
di f f - r d2cf a0a39f b6 f i l e1
- - - a/ f i l e1   Sun Apr 25 05: 32: 01
2010 +   0300
+ + b/ f i l e1
  +                 Sun Apr 25 05: 32: 19
2010 +   0300
@ - 1, 1 + 2 @
  @            1, @
  l i ne1
+ i ne2
  l
grep

* search only the project
* search trough the working copy

[ r oot @ Beast hg] # hg gr ep l i ne
f i l e1: 6: l i ne1

[ r oot @ Beast gi t ] # gi t gr ep l i ne
f i l e1: l i ne1
f i l e1: l i ne2
Git vs. Mercurial
$   gi t   cl one   di r
$   gi t   cl one   gi t : / / host / di r
$   gi t   cl one   ht t p( s) : / / host / di r
$   gi t   cl one   r sync: / / [ user @ host / di r
                                           ]
$   gi t   cl one   ssh: / / [ user @  host ] / di r

ssh onl y: gi t cl one [ user @ host : di r
                               ]
$ hg cl one ht t p: / / host / di r
$ hg cl one ssh: / / [ user @ host / di r
                               ]
pull
Pulling changes


Git pull
* combined fetch + merge

HG pull
* only fetch
* -U for fetch + merge
push
Pushing changes




$ gi t push [ or i gi n] [ m er ]
                            ast

$ hg push [ dest i nat i on]
branching
branching

GIT
HEAD –    poi nt s t o t he most r ecent
com i t
    m     i n t he cur r ent br anch
m er
 ast      – a speci al nam br anch
                             ed

Mercurial
t i p – poi nt s t o t he most r ecent
com i t
     m
H ead – i s t he t i p or t he t i ps of
m gi ng br anches
  er
branching

GIT
$ gi t br anch br anch_ name
$ gi t checkout br anch_ nam e

Mercurial
$ hg br anch br anch_ name
$ hg updat e br anch_ name
tags vs. branches
* Tags i n m cur i al ar e synonym t o
               er                   s
a changeset
* Tags i n m cur i al ar e ver si on
               er
cont r ol l ed
* Tags i n gi t ar e onl y a sym i nk t o
                                  l
a com i t
       m
* Tags i n gi t ar e onl y l ocal

* Br anches i n bot h ar e used f or
cont i nues devel opment
Няма значение за какво става въпрос...
Той е виновен!
Blame / annotate
$ hg annot at e - u - d - c - l mysql
f l or i an 07b950dc7279 Tue    M ar   02   . . . : 1:   # / bi n/ sh
                                                          !
beekhof 67234f 982ab7 Thu       J ul   05   . . . : 2:   #
f l or i an 01a181a4165c Fr i   Apr    02   . . . : 3:   #
beekhof 67234f 982ab7 Thu       J ul   05   . . . : 4:   #M LySQ
beekhof 67234f 982ab7 Thu       J ul   05   . . . : 5:   #
beekhof 67234f 982ab7 Thu       J ul   05   . . . : 6:   #D  escr i pt i on:
M anages a M L ySQ
beekhof 67234f 982ab7 Thu       J ul 05 . . . : 8:       #
f l or i an 380982a15dc8 Fr i   Apr 23 . . . : 8:        # Aut hor s:          Al an
Rober t son:
f l or i an 380982a15dc8 Fr i   Apr 23 . . . : 9:        #                     J akub
J anczak:
f l or i an 380982a15dc8 Fr i   Apr 23 . . . : 10: #                           Andr ew
Beekhof :
f l or i an 380982a15dc8 Fr i   Apr 23 . . . : 11: #
Sebast i an Rei t enbach:
$ gi t bl am haw pl
             e   k.
^0e22116 ( r oot 2008- 07- 09   ...    1)   # / usr / bi n/ per l - T
                                             !
a5062333 ( val 2009- 06- 10     ...    2)
^0e22116 ( r oot 2008- 07- 09   ...    3)   use st r i ct ;
^0e22116 ( r oot 2008- 07- 09   ...    4)   use w ni ngs;
                                                 ar
37f b4989 ( val 2009- 06- 01    ...    5)
a5062333 ( val 2009- 06- 10     ...    6)   use D : : m
                                                 BD    ysql ;
a5062333 ( val 2009- 06- 10     ...    7)   use PO X qw set si d) ,
                                                  SI     (
qw W O AN ) ;
  ( NH G
..........
a5062333 ( val 2009- 06- 10     ...   12)   i m t par se_ conf i g;
                                               por
6ad3f f 60 ( val 2009- 06- 19   ...   13)   i m t post _ a_ not e;
                                               por
^0e22116 ( r oot 2008- 07- 09   ...   14)
^0e22116 ( r oot 2008- 07- 09   ...   15)   # syst em var i abl es
^0e22116 ( r oot 2008- 07- 09   ...   16)   $ENV{PATH = ' ' ;
                                                      }
7868b7e1 ( val 2010- 04- 23     ...   17)   m $VERSI O = ' 2. 1. 0' ;
                                             y         N
^0e22116 ( r oot 2008- 07- 09   ...   18)
^0e22116 ( r oot 2008- 07- 09   ...   19)   # def i ni ng f aul t hashes

$ gi t bl am - L 16, 18 haw pl
            e                 k.
$ gi t bl am - L / use st r i ct / , / use D / haw pl
            e                               BD    k.
books
books


Mercurial
* http://hgbook.red-bean.com/read/

Git
* http://book.git-scm.com/
* http://progit.org/book/
E-mail: mm@yuhu.biz
Jabber: hackman@jabber.org




             Thank you!




Marian Marinov
System Architect at Siteground.com

More Related Content

What's hot (20)

PDF
Training: Day Two - Eclipse, Git, Maven
Artur Ventura
 
PDF
Introduction to Git and GitHub
Vikram SV
 
PDF
Intro To Git
kyleburton
 
PPTX
Version controll.pptx
Md. Main Uddin Rony
 
PDF
Subversion to Git Migration
Manish Chakravarty
 
PPT
Introduction to git
Nguyen Van Hung
 
PDF
Version control with GIT
Zeeshan Khan
 
PDF
Comparison of SVN and Git
Daniel Wieth
 
PPTX
Git hub_pptx
PathanNadhiyaSulthan
 
PDF
Using Subversion and Git Together
tmatesoftware
 
PDF
OSDC 2018 | Scaling & High Availability MySQL learnings from the past decade+...
NETWAYS
 
PPTX
Lets git to it
Yoram Michaeli
 
PPTX
Git hub ppt presentation
AyanaRukasar
 
PDF
Containers, Clusters and Kubernetes - Brendan Burns - Defrag 2014
brendandburns
 
PDF
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
Imesh Gunaratne
 
PPTX
Branch Management in Git Fusion
Perforce
 
PDF
Kubernetes Basic Operation
Simon Su
 
PDF
Scale out, with Kubernetes (k8s)
Arkadiusz Borek
 
PDF
OSDC 2018 | Monitoring Kubernetes at Scale by Monica Sarbu
NETWAYS
 
PDF
Advanced Git - Functionality and Features
All Things Open
 
Training: Day Two - Eclipse, Git, Maven
Artur Ventura
 
Introduction to Git and GitHub
Vikram SV
 
Intro To Git
kyleburton
 
Version controll.pptx
Md. Main Uddin Rony
 
Subversion to Git Migration
Manish Chakravarty
 
Introduction to git
Nguyen Van Hung
 
Version control with GIT
Zeeshan Khan
 
Comparison of SVN and Git
Daniel Wieth
 
Git hub_pptx
PathanNadhiyaSulthan
 
Using Subversion and Git Together
tmatesoftware
 
OSDC 2018 | Scaling & High Availability MySQL learnings from the past decade+...
NETWAYS
 
Lets git to it
Yoram Michaeli
 
Git hub ppt presentation
AyanaRukasar
 
Containers, Clusters and Kubernetes - Brendan Burns - Defrag 2014
brendandburns
 
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
Imesh Gunaratne
 
Branch Management in Git Fusion
Perforce
 
Kubernetes Basic Operation
Simon Su
 
Scale out, with Kubernetes (k8s)
Arkadiusz Borek
 
OSDC 2018 | Monitoring Kubernetes at Scale by Monica Sarbu
NETWAYS
 
Advanced Git - Functionality and Features
All Things Open
 

Similar to Git vs. Mercurial (20)

PDF
分布式版本管理
jeffz
 
PDF
Mercurial: Modern Source Control Management
John Paulett
 
PDF
Git for the Android Developer
Effective
 
PDF
Git for the Android Developer
EffectiveUI
 
PDF
SCM for Android Developers Using Git
Tony Hillerson
 
PDF
Git Going With DVCS v1.5.2
Matthew McCullough
 
DOC
Git major commands
myepicslides
 
PDF
Git major commands
myepicslides
 
PDF
The Mercurial SCM
elliando dias
 
PDF
Git 101 for CloudStack
Sebastien Goasguen
 
PDF
Git For The Android Developer
Effective
 
PDF
Git cheat-sheets
ozone777
 
PDF
Learning Git with Workflows
Mosky Liu
 
PPTX
Source control management
Owen Winkler
 
KEY
Git and GitHub
James Gray
 
PPT
Introduction to Git
atishgoswami
 
PDF
GTFO: Git Theory For OpenSource
Forest Mars
 
PPTX
Git basic stanley hsiao 2010_12_15
Chen-Han Hsiao
 
PDF
Git tutorial
Elli Kanal
 
PDF
Mercurial The Definitive Guide 1st Edition Bryan O'Sullivan
aydjantertsi22
 
分布式版本管理
jeffz
 
Mercurial: Modern Source Control Management
John Paulett
 
Git for the Android Developer
Effective
 
Git for the Android Developer
EffectiveUI
 
SCM for Android Developers Using Git
Tony Hillerson
 
Git Going With DVCS v1.5.2
Matthew McCullough
 
Git major commands
myepicslides
 
Git major commands
myepicslides
 
The Mercurial SCM
elliando dias
 
Git 101 for CloudStack
Sebastien Goasguen
 
Git For The Android Developer
Effective
 
Git cheat-sheets
ozone777
 
Learning Git with Workflows
Mosky Liu
 
Source control management
Owen Winkler
 
Git and GitHub
James Gray
 
Introduction to Git
atishgoswami
 
GTFO: Git Theory For OpenSource
Forest Mars
 
Git basic stanley hsiao 2010_12_15
Chen-Han Hsiao
 
Git tutorial
Elli Kanal
 
Mercurial The Definitive Guide 1st Edition Bryan O'Sullivan
aydjantertsi22
 
Ad

More from Marian Marinov (20)

PDF
How to start and then move forward in IT
Marian Marinov
 
PDF
Thinking about highly-available systems and their setup
Marian Marinov
 
PDF
Understanding your memory usage under Linux
Marian Marinov
 
PDF
How to implement PassKeys in your application
Marian Marinov
 
PDF
Dev.bg DevOps March 2024 Monitoring & Logging
Marian Marinov
 
PDF
Basic presentation of cryptography mechanisms
Marian Marinov
 
PDF
Microservices: Benefits, drawbacks and are they for me?
Marian Marinov
 
PDF
Introduction and replication to DragonflyDB
Marian Marinov
 
PDF
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Marian Marinov
 
PDF
How to successfully migrate to DevOps .pdf
Marian Marinov
 
PDF
How to survive in the work from home era
Marian Marinov
 
PDF
Managing sysadmins
Marian Marinov
 
PDF
Improve your storage with bcachefs
Marian Marinov
 
PDF
Control your service resources with systemd
Marian Marinov
 
PDF
Comparison of-foss-distributed-storage
Marian Marinov
 
PDF
Защо и как да обогатяваме знанията си?
Marian Marinov
 
PDF
Securing your MySQL server
Marian Marinov
 
PDF
Sysadmin vs. dev ops
Marian Marinov
 
PDF
DoS and DDoS mitigations with eBPF, XDP and DPDK
Marian Marinov
 
PDF
Challenges with high density networks
Marian Marinov
 
How to start and then move forward in IT
Marian Marinov
 
Thinking about highly-available systems and their setup
Marian Marinov
 
Understanding your memory usage under Linux
Marian Marinov
 
How to implement PassKeys in your application
Marian Marinov
 
Dev.bg DevOps March 2024 Monitoring & Logging
Marian Marinov
 
Basic presentation of cryptography mechanisms
Marian Marinov
 
Microservices: Benefits, drawbacks and are they for me?
Marian Marinov
 
Introduction and replication to DragonflyDB
Marian Marinov
 
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Marian Marinov
 
How to successfully migrate to DevOps .pdf
Marian Marinov
 
How to survive in the work from home era
Marian Marinov
 
Managing sysadmins
Marian Marinov
 
Improve your storage with bcachefs
Marian Marinov
 
Control your service resources with systemd
Marian Marinov
 
Comparison of-foss-distributed-storage
Marian Marinov
 
Защо и как да обогатяваме знанията си?
Marian Marinov
 
Securing your MySQL server
Marian Marinov
 
Sysadmin vs. dev ops
Marian Marinov
 
DoS and DDoS mitigations with eBPF, XDP and DPDK
Marian Marinov
 
Challenges with high density networks
Marian Marinov
 
Ad

Recently uploaded (20)

PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Biography of Daniel Podor.pdf
Daniel Podor
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 

Git vs. Mercurial

  • 1. Git vs. Mercurial Marian Marinov System Architect at Siteground.com
  • 5. 1. Evolution of revision control systems * RCS -> CVS -> SVN * Single repository for the history * Working copy of a file * Only one developer can commit at a time * Complicated merges RCS/CVS/SVN ARE YOUR ENEMY
  • 6. 2. Distributed version control systems(DVCS) * Locally accessible history * Every developer can commit at will * Every client can become a server (no single server required) * Seamless merges
  • 7. 3. Basic repository models * Shared repository Top repository clone 1 clone 2 clone 4 clone 3 * Distributed repository Repository Repository Repository Repository Repository Repository Repository * Access polices
  • 8. Centralized Workflow shared repository developer developer developer
  • 9. Integration-Manager Workflow Project's Developer Developer Developer repository public public public Integration manager Developer Developer Developer private private private
  • 10. Dictator Workflow kernel.org Sub tree maintainer Sub tree maintainer Sub tree maintainer developer developer developer developer developer developer
  • 11. Dictator Workflow kernel.org Sub tree maintainer Sub tree maintainer Sub tree maintainer developer developer developer developer developer developer
  • 12. 4. Basic work * init * add * commit * mv / rename * rm vs. remove * log * diff * grep * clone * push * pull * branch & checkout * blame vs. annotate
  • 14. init [root@Beast git]# time git init Initialized empty Git repository in .git/ real 0m0.129s user 0m0.000s sys 0m0.000s [root@Beast hg]# time hg init real 0m0.204s user 0m0.020s sys 0m0.010s [root@Beast hg]#
  • 15. add [root@Beast git]# time git add file0 real 0m0.016s user 0m0.000s sys 0m0.000s [root@Beast hg]# time hg add file0 real 0m0.098s user 0m0.030s sys 0m0.010s
  • 17. status [root@Beast git]# time git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # file0 nothing added to commit but untracked files present (use "git add" to track) real 0m0.034s user 0m0.000s sys 0m0.000s
  • 18. status [root@Beast hg]# time hg status ? file0 real 0m0.028s user 0m0.010s sys 0m0.010s
  • 19. commit [root@Beast git]# time git commit -m 'added file0' file0 Created initial commit 43bb00d: added file0 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file0 real 0m0.047s user 0m0.000s sys 0m0.000s
  • 20. commit [root@Beast hg]# time hg commit -m 'added file0' file0 No username found, using '[email protected]' instead real 0m0.218s user 0m0.030s sys 0m0.000s
  • 22. status [root@Beast hg]# hg status [root@Beast git]# git status # On branch master nothing to commit (working directory clean)
  • 23. move
  • 24. move [root@Beast git]# git mv file0 file1 [root@Beast git]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: file0 -> file1 # [root@Beast git]# git commit -m 'renamed file0' file1 Created commit 077d7a3: renamed file0 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file1
  • 25. move [root@Beast git]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: file0 # [root@Beast git]# git commit -m 'removed file0' file0 Created commit dfa8fb4: removed file0 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 file0
  • 26. move [root@Beast hg]# hg rename file0 file1 [root@Beast hg]# hg status A file1 R file0 [root@Beast hg]# hg commit -m 'renamed file0 to file1' file1 [root@Beast hg]# hg status R file0 [root@Beast hg]# hg commit -m 'removed file0' file0 [root@Beast hg]# hg status
  • 27. rm
  • 28. rm [root@Beast hg]# hg remove new1 [root@Beast hg]# hg status R new1 [root@Beast hg]# hg commit -m 'removed new1' new1 [root@Beast hg]# hg status [root@Beast hg]#
  • 29. [root@Beast git]# git rm file1 rm 'file1' [root@Beast git]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: file1 # [root@Beast git]# git commit -m 'rm file1' file1 Created commit d47d595: removed file1 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 file1 [root@Beast git]# git status # On branch master nothing to commit (working directory clean)
  • 30. LOG
  • 31. $ hg l og changeset : t ag: 4: 2278160e78d4 ti p the hg way user : Br yan O' Sul l i van < bos@ pent i ne. com ser > dat e: Sat Aug 16 22: 16: 53 2008 + 0200 sum ar y: m Tr i m com ent s. m changeset : 3: 0272e0d5a517 user : Br yan O' Sul l i van < bos@ pent i ne. com ser > dat e: Sat Aug 16 22: 08: 02 2008 + 0200 sum ar y: m Get m ake t o gener at e t he f i nal bi nar y f r om a . o f i l e. changeset : 2: f ef 857204a0c user : Br yan O' Sul l i van < bos@ pent i ne. com ser > dat e: Sat Aug 16 22: 05: 04 2008 + 0200 sum ar y: m I nt r oduce a t ypo i nt o hel l o. c. changeset : 1: 82e55d328c8c user : m @ eni c. com pm sel dat e: Fr i Aug 26 01: 21: 28 2005 - 0700 sum ar y: m Cr eat e a m akef i l e changeset : 0: 0a04b987be5a user : m @ eni c. com pm sel dat e: Fr i Aug 26 01: 20: 50 2005 - 0700 sum ar y: m Cr eat e a st andar d " hel l o, w l d" pr ogr am or
  • 32. the hg way $ hg log -r 3 changeset: 3:0272e0d5a517 user: Bryan O'Sullivan <[email protected]> date: Sat Aug 16 22:08:02 2008 +0200 summary: Get make to generate the final binary from a .o file. $ hg log -r 0272e0d5a517 changeset: 3:0272e0d5a517 user: Bryan O'Sullivan <[email protected]> date: Sat Aug 16 22:08:02 2008 +0200 summary: Get make to generate the final binary from a .o file. $ hg log -r 1 -r 4 $ hg log -r 2:4 $ hg log -v -p -r 2
  • 33. $ gi t l og the git way com i t ca82a6df f 817ec66f 44342007202690a93763949 m Aut hor : Scot t Chacon < schacon@ gee- m l . com ai > Dat e: Mon M ar 17 21: 52: 11 2008 - 0700 changed t he ver si on number com i t 085bb3bcb608e1e8451d4b2432f 8ecbe6306e7e7 m Aut hor : Scot t Chacon < schacon@ gee- m l . com ai > Dat e: Sat M ar 15 16: 40: 33 2008 - 0700 r emoved unnecessar y t est code com i t a11bef 06a3f 659402f e7563abf 99ad00de2209e6 m Aut hor : Scot t Chacon < schacon@ gee- m l . com ai > Dat e: Sat M ar 15 10: 31: 28 2008 - 0700 f i r st com i t m
  • 34. $ gi t l og m er ~ ast 2 $ gi t l og m er ~ . m er ~ ast 2. ast 4 $ gi t l og m er ^ 1 = gi t l og ast 1^ = m er ~ ast 2 $ gi t l og m er ^ ast 2 $ gi t l og -p $ gi t l og – si nce= w2. eeks $ gi t l og - - col or the git way
  • 35. diff
  • 36. [ r oot @Beast gi t ] # cat f i l e1 l i ne1 [ r oot @Beast gi t ] # echo ' l i ne2' >> f i l e1 [ r oot @Beast gi t ] # gi t di f f di f f - - gi t a/ f i l e1 b/ f i l e1 i ndex a29bdeb. . c0d0f b4 100644 - - - a/ f i l e1 + + b/ f i l e1 + @ -1 + 2 @ @ 1, @ l i ne1 + i ne2 l
  • 37. [ r oot @Beast hg] # cat f i l e1 l i ne1 [ r oot @Beast hg] # echo ' l i ne2' >> f i l e1 [ r oot @Beast hg] # hg di f f di f f - r d2cf a0a39f b6 f i l e1 - - - a/ f i l e1 Sun Apr 25 05: 32: 01 2010 + 0300 + + b/ f i l e1 + Sun Apr 25 05: 32: 19 2010 + 0300 @ - 1, 1 + 2 @ @ 1, @ l i ne1 + i ne2 l
  • 38. grep * search only the project * search trough the working copy [ r oot @ Beast hg] # hg gr ep l i ne f i l e1: 6: l i ne1 [ r oot @ Beast gi t ] # gi t gr ep l i ne f i l e1: l i ne1 f i l e1: l i ne2
  • 40. $ gi t cl one di r $ gi t cl one gi t : / / host / di r $ gi t cl one ht t p( s) : / / host / di r $ gi t cl one r sync: / / [ user @ host / di r ] $ gi t cl one ssh: / / [ user @ host ] / di r ssh onl y: gi t cl one [ user @ host : di r ]
  • 41. $ hg cl one ht t p: / / host / di r $ hg cl one ssh: / / [ user @ host / di r ]
  • 42. pull
  • 43. Pulling changes Git pull * combined fetch + merge HG pull * only fetch * -U for fetch + merge
  • 44. push
  • 45. Pushing changes $ gi t push [ or i gi n] [ m er ] ast $ hg push [ dest i nat i on]
  • 47. branching GIT HEAD – poi nt s t o t he most r ecent com i t m i n t he cur r ent br anch m er ast – a speci al nam br anch ed Mercurial t i p – poi nt s t o t he most r ecent com i t m H ead – i s t he t i p or t he t i ps of m gi ng br anches er
  • 48. branching GIT $ gi t br anch br anch_ name $ gi t checkout br anch_ nam e Mercurial $ hg br anch br anch_ name $ hg updat e br anch_ name
  • 49. tags vs. branches * Tags i n m cur i al ar e synonym t o er s a changeset * Tags i n m cur i al ar e ver si on er cont r ol l ed * Tags i n gi t ar e onl y a sym i nk t o l a com i t m * Tags i n gi t ar e onl y l ocal * Br anches i n bot h ar e used f or cont i nues devel opment
  • 50. Няма значение за какво става въпрос... Той е виновен!
  • 51. Blame / annotate $ hg annot at e - u - d - c - l mysql f l or i an 07b950dc7279 Tue M ar 02 . . . : 1: # / bi n/ sh ! beekhof 67234f 982ab7 Thu J ul 05 . . . : 2: # f l or i an 01a181a4165c Fr i Apr 02 . . . : 3: # beekhof 67234f 982ab7 Thu J ul 05 . . . : 4: #M LySQ beekhof 67234f 982ab7 Thu J ul 05 . . . : 5: # beekhof 67234f 982ab7 Thu J ul 05 . . . : 6: #D escr i pt i on: M anages a M L ySQ beekhof 67234f 982ab7 Thu J ul 05 . . . : 8: # f l or i an 380982a15dc8 Fr i Apr 23 . . . : 8: # Aut hor s: Al an Rober t son: f l or i an 380982a15dc8 Fr i Apr 23 . . . : 9: # J akub J anczak: f l or i an 380982a15dc8 Fr i Apr 23 . . . : 10: # Andr ew Beekhof : f l or i an 380982a15dc8 Fr i Apr 23 . . . : 11: # Sebast i an Rei t enbach:
  • 52. $ gi t bl am haw pl e k. ^0e22116 ( r oot 2008- 07- 09 ... 1) # / usr / bi n/ per l - T ! a5062333 ( val 2009- 06- 10 ... 2) ^0e22116 ( r oot 2008- 07- 09 ... 3) use st r i ct ; ^0e22116 ( r oot 2008- 07- 09 ... 4) use w ni ngs; ar 37f b4989 ( val 2009- 06- 01 ... 5) a5062333 ( val 2009- 06- 10 ... 6) use D : : m BD ysql ; a5062333 ( val 2009- 06- 10 ... 7) use PO X qw set si d) , SI ( qw W O AN ) ; ( NH G .......... a5062333 ( val 2009- 06- 10 ... 12) i m t par se_ conf i g; por 6ad3f f 60 ( val 2009- 06- 19 ... 13) i m t post _ a_ not e; por ^0e22116 ( r oot 2008- 07- 09 ... 14) ^0e22116 ( r oot 2008- 07- 09 ... 15) # syst em var i abl es ^0e22116 ( r oot 2008- 07- 09 ... 16) $ENV{PATH = ' ' ; } 7868b7e1 ( val 2010- 04- 23 ... 17) m $VERSI O = ' 2. 1. 0' ; y N ^0e22116 ( r oot 2008- 07- 09 ... 18) ^0e22116 ( r oot 2008- 07- 09 ... 19) # def i ni ng f aul t hashes $ gi t bl am - L 16, 18 haw pl e k. $ gi t bl am - L / use st r i ct / , / use D / haw pl e BD k.
  • 53. books
  • 55. E-mail: [email protected] Jabber: [email protected] Thank you! Marian Marinov System Architect at Siteground.com