O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Git vs. Mercurial




Marian Marinov
System Architect at Siteground.com
1. Evolution of revision control systems
* RCS -> CVS -> SVN
* Single repository for the history
* Working copy of a file
...
2. Distributed version control systems(DVCS)
 * Locally accessible history
 * Every developer can commit at will
 * Every ...
3. Basic repository models
 * Shared repository       Top repository


    clone 1


                  clone 2
           ...
Centralized Workflow
                           shared
                         repository




           developer




  ...
Integration-Manager Workflow
         Project's     Developer    Developer   Developer
        repository      public     ...
Dictator Workflow

                                                       kernel.org

                                  Su...
Dictator Workflow

                                                       kernel.org

                                  Su...
4. Basic work
  * init
  * add
  * commit
  * mv / rename
  * rm vs. remove
  * log
  * diff
  * grep
  * clone
  * push
 ...
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
...
add
[root@Beast git]# time git add file0

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

[root@Beast hg]# time hg add file0

r...
status
[root@Beast git]# time git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>...
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 chan...
commit


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

re...
status


[root@Beast hg]# hg status

[root@Beast git]# git status
# On branch master
nothing to commit (working directory ...
move
move
[root@Beast git]# git mv file0 file1
[root@Beast git]# git status
# On branch master
# Changes to be committed:
# (us...
move

[root@Beast git]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unst...
move

[root@Beast hg]# hg rename file0 file1
[root@Beast hg]# hg status
A file1
R file0
[root@Beast hg]# hg commit -m 'ren...
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 git]# git rm file1
rm 'file1'
[root@Beast git]# git status
# On branch master
# Changes to be committed:
# (us...
LOG
$ hg l og
changeset :
t ag:
                     4: 2278160e78d4
                     ti p
                               ...
the hg way
$ hg log -r 3
changeset:    3:0272e0d5a517
user:        Bryan O'Sullivan <bos@serpentine.com>
date:        Sat ...
$ gi t l og                         the git way
com i t ca82a6df f 817ec66f 44342007202690a93763949
   m
Aut hor : Scot t ...
$ 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...
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 ] # g...
[ 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
...
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 n...
$   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
$   g...
$ 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 sp...
branching

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

Mercurial
$ hg br anch br anch_ name
$ hg upda...
tags vs. branches
* Tags i n m cur i al ar e synonym t o
               er                   s
a changeset
* Tags i n m cu...
Няма значение за какво става въпрос...
Той е виновен!
Blame / annotate
$ hg annot at e - u - d - c - l mysql
f l or i an 07b950dc7279 Tue    M ar   02   . . . : 1:   # / bi n/ ...
$ gi t bl am haw pl
             e   k.
^0e22116 ( r oot 2008- 07- 09   ...    1)   # / usr / bi n/ per l - T
            ...
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 Sitegrou...
Git vs. Mercurial
Git vs. Mercurial
Git vs. Mercurial
Git vs. Mercurial
Git vs. Mercurial
Git vs. Mercurial
Próximos SlideShares
Carregando em…5
×

Git vs. Mercurial

3.390 visualizações

Publicada em

This presentation shows the differences and the similarities between Git and Mercurial.
It covers only the very basic commands

Publicada em: Tecnologia
  • If you are looking for customer-oriented academic and research paper writing service try ⇒⇒⇒ WRITE-MY-PAPER.net ⇐⇐⇐ liked them A LOTTT Really nice solutions for the last-day papers
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Have u ever tried external professional writing services like ⇒ www.HelpWriting.net ⇐ ? I did and I am more than satisfied.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Dating direct: ❶❶❶ http://bit.ly/39mQKz3 ❶❶❶
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Sex in your area is here: ♥♥♥ http://bit.ly/39mQKz3 ♥♥♥
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Git vs. Mercurial

  1. 1. Git vs. Mercurial Marian Marinov System Architect at Siteground.com
  2. 2. 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
  3. 3. 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
  4. 4. 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
  5. 5. Centralized Workflow shared repository developer developer developer
  6. 6. Integration-Manager Workflow Project's Developer Developer Developer repository public public public Integration manager Developer Developer Developer private private private
  7. 7. Dictator Workflow kernel.org Sub tree maintainer Sub tree maintainer Sub tree maintainer developer developer developer developer developer developer
  8. 8. Dictator Workflow kernel.org Sub tree maintainer Sub tree maintainer Sub tree maintainer developer developer developer developer developer developer
  9. 9. 4. Basic work * init * add * commit * mv / rename * rm vs. remove * log * diff * grep * clone * push * pull * branch & checkout * blame vs. annotate
  10. 10. Basic performance info
  11. 11. 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]#
  12. 12. 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
  13. 13. 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
  14. 14. status [root@Beast hg]# time hg status ? file0 real 0m0.028s user 0m0.010s sys 0m0.010s
  15. 15. 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
  16. 16. 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
  17. 17. status [root@Beast hg]# hg status [root@Beast git]# git status # On branch master nothing to commit (working directory clean)
  18. 18. move
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. rm
  23. 23. 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]#
  24. 24. [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)
  25. 25. LOG
  26. 26. $ 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
  27. 27. 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
  28. 28. $ 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
  29. 29. $ 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
  30. 30. diff
  31. 31. [ 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
  32. 32. [ 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
  33. 33. 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
  34. 34. $ 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 ]
  35. 35. $ hg cl one ht t p: / / host / di r $ hg cl one ssh: / / [ user @ host / di r ]
  36. 36. pull
  37. 37. Pulling changes Git pull * combined fetch + merge HG pull * only fetch * -U for fetch + merge
  38. 38. push
  39. 39. Pushing changes $ gi t push [ or i gi n] [ m er ] ast $ hg push [ dest i nat i on]
  40. 40. branching
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. Няма значение за какво става въпрос... Той е виновен!
  45. 45. 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:
  46. 46. $ 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.
  47. 47. books
  48. 48. books Mercurial * http://hgbook.red-bean.com/read/ Git * http://book.git-scm.com/ * http://progit.org/book/
  49. 49. E-mail: mm@yuhu.biz Jabber: hackman@jabber.org Thank you! Marian Marinov System Architect at Siteground.com

×