Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Freelance Symfony2 Devops @ubermuda Auteur Développeur Formateur

Slide 3

Slide 3 text

La théorie des graphs

Slide 4

Slide 4 text

Seven bridges of Königsberg

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Leonhard Euler lol noobs.

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Git ?!?!?!?!

Slide 12

Slide 12 text

A B E D C

Slide 13

Slide 13 text

A B E D C Noeuds

Slide 14

Slide 14 text

A B E D C Arêtes

Slide 15

Slide 15 text

A B E D C Graph orienté

Slide 16

Slide 16 text

A B E D C Graph orienté

Slide 17

Slide 17 text

Atteignabilité (reachability)

Slide 18

Slide 18 text

A B E D C Atteignabilité

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Atteignabilité NOPE A B E D C

Slide 21

Slide 21 text

A B D E C Atteignabilité F

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Atteignabilité

Slide 24

Slide 24 text

Qu'est-ce qu'une branche ?

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

$  git  branch   *  master      foo

Slide 29

Slide 29 text

$  git  branch   *  master      foo

Slide 30

Slide 30 text

A B D E C F master foo

Slide 31

Slide 31 text

A B D E C F master foo Atteignabilité !

Slide 32

Slide 32 text

Qu'est-ce qu'un merge ?

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

fast-forward ?

Slide 36

Slide 36 text

A B C E D origin/master master F

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

cherry-pick ?

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

rebase ?

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

merge base ! premier ancêtre commun

Slide 46

Slide 46 text

A B D E C F master foo Atteignable !

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

fetch

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

push

Slide 59

Slide 59 text

A B C master A B master origin local D

Slide 60

Slide 60 text

A B C master A B master origin local D D

Slide 61

Slide 61 text

A B C master A B master origin local D D A B C master A B master D D

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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