Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Git et la théorie des graph

Git et la théorie des graph

ubermuda

June 24, 2014
Tweet

More Decks by ubermuda

Other Decks in Programming

Transcript

  1. Git et la théorie des graphs
    Geoffrey Bachelet – @ubermuda
    All your rebase are belong to us

    View Slide

  2. Freelance
    Symfony2
    Devops
    @ubermuda
    Auteur
    Développeur
    Formateur

    View Slide

  3. La théorie des graphs

    View Slide

  4. Seven bridges of Königsberg

    View Slide

  5. Seven bridges of Königsberg
    Traverser chaque pont de Königsberg
    Une et une seule fois

    View Slide

  6. View Slide

  7. Leonhard Euler
    lol noobs.

    View Slide

  8. http://fr.wikipedia.org/wiki/Probl%C3%A8me_des_sept_ponts_de_K%C3%B6nigsberg

    View Slide

  9. http://fr.wikipedia.org/wiki/Probl%C3%A8me_des_sept_ponts_de_K%C3%B6nigsberg
    graph

    View Slide

  10. Un graphe est une collection d'éléments mis en relation entre eux.
    !
    ...
    !
    Selon que l'on choisit d'orienter les arêtes ou de leur attribuer un
    poids (un coût de passage), on parle de graphes orientés ou de
    graphes pondérés.
    http://www.futura-sciences.com/magazines/mathematiques/infos/dico/d/mathematiques-theorie-graphes-4712/
    www.futura-sciences.com
    Définition

    View Slide

  11. Git ?!?!?!?!

    View Slide

  12. A B E
    D
    C

    View Slide

  13. A B E
    D
    C
    Noeuds

    View Slide

  14. A B E
    D
    C
    Arêtes

    View Slide

  15. A B E
    D
    C
    Graph orienté

    View Slide

  16. A B E
    D
    C
    Graph orienté

    View Slide

  17. Atteignabilité
    (reachability)

    View Slide

  18. A B E
    D
    C
    Atteignabilité

    View Slide

  19. Atteignabilité
    C est atteignable depuis E
    A B E
    D
    C

    View Slide

  20. Atteignabilité
    NOPE
    A B E
    D
    C

    View Slide

  21. A B
    D
    E
    C
    Atteignabilité
    F

    View Slide

  22. A B
    D
    E
    C
    Atteignabilité
    F
    D n'est pas atteignable depuis F

    View Slide

  23. Atteignabilité

    View Slide

  24. Qu'est-ce qu'une branche ?

    View Slide

  25. $  ls  .git/refs/heads/  
    master  
    !
    $  cat  .git/refs/heads/master  
    58bd01cded7904f1596cb12aac1d3e0e8ae6b558

    View Slide

  26. $  git  log  -­‐-­‐format="%H"  
    6465a2cd4d6d3b0a0a62588eeb5b798bb7d31a71  
    7d1d4dabc49854a0807200361731446476565094  
    17a59ceda9b2806e2a135df039506d1ec1a976e6  
    ...

    View Slide

  27. $  echo  "6465a2cd4d6d3b0a0a62588eeb5b798bb7d31a71"  \  
      >  .git/refs/heads/foo

    View Slide

  28. $  git  branch  
    *  master  
       foo

    View Slide

  29. $  git  branch  
    *  master  
       foo

    View Slide

  30. A B
    D
    E
    C
    F
    master
    foo

    View Slide

  31. A B
    D
    E
    C
    F
    master
    foo
    Atteignabilité !

    View Slide

  32. Qu'est-ce qu'un merge ?

    View Slide

  33. A B
    D
    E
    C
    F
    master
    foo
    $  git  merge  master  foo

    View Slide

  34. A B
    D
    E
    C
    F
    master
    foo
    Atteignabilité !
    G

    View Slide

  35. fast-forward ?

    View Slide

  36. A B C E
    D
    origin/master
    master
    F

    View Slide

  37. A B C E
    D
    origin/master
    master
    F
    $  git  merge  origin/master
    Atteignable !

    View Slide

  38. C E
    D
    origin/master
    master
    F
    master
    $  git  merge  origin/master
    A B

    View Slide

  39. cherry-pick ?

    View Slide

  40. A B
    D
    E
    C
    F
    master
    foo
    $  git  checkout  foo  
    $  git  cherry  pick  F

    View Slide

  41. master
    foo
    F'
    $  git  checkout  foo  
    $  git  cherry  pick  F
    A B
    D
    E
    C
    F
    master
    foo

    View Slide

  42. rebase ?

    View Slide

  43. $  git  checkout  foo  
    $  git  rebase  master
    A B
    D
    E
    C
    F
    master
    foo

    View Slide

  44. B
    merge base
    $  git  checkout  foo  
    $  git  rebase  master
    A
    D
    E
    C
    F
    master
    foo

    View Slide

  45. merge base
    !
    premier ancêtre commun

    View Slide

  46. A B
    D
    E
    C
    F
    master
    foo
    Atteignable !

    View Slide

  47. A B
    D
    E
    C
    F
    master
    foo
    C'
    $  git  checkout  foo  
    $  git  rebase  master

    View Slide

  48. A B
    D
    E
    C
    F
    master
    foo
    C' D'
    $  git  checkout  foo  
    $  git  rebase  master

    View Slide

  49. A B
    D
    E
    C
    F
    master
    foo
    C' D'
    foo
    $  git  checkout  foo  
    $  git  rebase  master

    View Slide

  50. A B
    D
    E
    C
    F
    master
    C' D'
    foo
    ???
    $  git  checkout  foo  
    $  git  rebase  master

    View Slide

  51. A B
    D
    E
    C
    F
    master
    C' D'
    foo
    Headless
    $  git  checkout  foo  
    $  git  rebase  master

    View Slide

  52. Headless
    non-atteignable depuis une référence
    susceptible d'être "garbage collecté"

    View Slide

  53. A B
    D
    E
    C
    F
    master
    C' D'
    foo
    $  git  reset  -­‐-­‐hard  D
    foo
    A B
    D
    E
    C
    F C' D'

    View Slide

  54. fetch

    View Slide

  55. A B C D
    master
    A B
    master
    origin
    local
    origin/master

    View Slide

  56. A B C D
    master
    A B
    master
    origin
    local
    C D
    origin/master
    FETCH !

    View Slide

  57. A B C D
    master
    A B
    master
    origin
    local
    C D
    origin/master

    View Slide

  58. push

    View Slide

  59. A B C
    master
    A B
    master
    origin
    local
    D

    View Slide

  60. A B C
    master
    A B
    master
    origin
    local
    D
    D

    View Slide

  61. A B C
    master
    A B
    master
    origin
    local
    D
    D
    A B C
    master
    A B
    master
    D
    D

    View Slide

  62. A B C
    master
    A B
    master
    origin
    local
    D
    D
    A B C
    master
    A B
    master
    D
    D
    NOPE

    View Slide

  63. Geoffrey Bachelet – @ubermuda
    http:/
    /stage1.io/
    https://speackerdeck.com/ubermuda/git-et-la-theorie-des-graph

    View Slide