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

La théorie des graphes appliquée à Git

ubermuda
April 17, 2017

La théorie des graphes appliquée à Git

ubermuda

April 17, 2017
Tweet

More Decks by ubermuda

Other Decks in Technology

Transcript

  1. La théorie des graphes
    appliquée à git
    Geoffrey Bachelet
    @ubermuda

    View Slide

  2. Königsberg

    View Slide

  3. ez pz
    Leonhard
    Euler

    View Slide

  4. View Slide

  5. Pont
    Masse de terre

    View Slide

  6. Arête
    Noeud
    graphe

    View Slide

  7. 1 2
    3
    4

    View Slide

  8. View Slide

  9. A B E
    D
    C

    View Slide

  10. A B E
    D
    C
    Noeuds

    View Slide

  11. A B E
    C
    Arêtes
    D

    View Slide

  12. A B E
    D
    C
    Graph orienté

    View Slide

  13. A B E
    D
    C
    Graph orienté

    View Slide

  14. View Slide

  15. Atteignabilité

    View Slide

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

    View Slide

  17. Atteignabilité
    NOPE
    A B E
    D
    C

    View Slide

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

    View Slide

  19. Atteignabilité

    View Slide

  20. View Slide

  21. $ git branch
    * master
    $ ls .git/refs/heads/
    master
    $ cat .git/refs/heads/master
    58bd01cded7904f1596cb12aac1d3e0e8ae6b558

    View Slide

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

    View Slide

  23. $ echo "6465a2cd" > .git/refs/heads/foo

    View Slide

  24. $ git branch
    * master
    foo

    View Slide

  25. A B
    D
    E
    C
    F
    master
    foo

    View Slide

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

    View Slide

  27. View Slide

  28. Rappel
    • Une branche
    • Un tag
    • HEAD : commit actuel à un instant T
    Références

    View Slide

  29. Merge

    View Slide

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

    View Slide

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

    View Slide

  32. A B
    D
    E
    C
    F
    master
    G
    foo
    $ git merge master
    HEAD

    View Slide

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

    View Slide

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

    View Slide

  35. fast-forward

    View Slide

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

    View Slide

  37. A B C E
    D
    foo
    master
    F
    $ git merge foo
    Atteignable
    HEAD

    View Slide

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

    View Slide

  39. cherry-pick

    View Slide

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

    View Slide

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

    View Slide

  42. rebase

    View Slide

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

    View Slide

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

    View Slide

  45. merge base
    premier ancêtre commun
    Atteignable !

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    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'
    HEAD

    View Slide

  54. $ git reflog
    ...
    384b39c [email protected]{10}: merge feature/bdl-auth: Fast-forward
    84541fe [email protected]{11}: checkout: moving from feature/bdl-auth to
    384b39c [email protected]{12}: rebase finished: returning to refs/heads/f
    384b39c [email protected]{13}: rebase: Add auth bundle

    View Slide

  55. fetch

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  59. push

    View Slide

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

    View Slide

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

    View Slide

  62. A B
    master
    A B
    master
    A B
    A B
    origin
    local
    C
    D
    D
    PAS
    ATTEIGNABLE

    View Slide

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

    View Slide

  64. View Slide

  65. Atteignabilité.

    View Slide

  66. https://speackerdeck.com/ubermuda
    https://think-like-a-git.net/
    Geoffrey Bachelet
    @ubermuda

    View Slide