CONFERENCE GIT
Archibald Picq - Jean-Christophe Baudier
Fabien Casters - Julien Smolareck
@BigInt_Nancy05 apr. 2017
2
Pourquoi utiliser un outil de
versioning ?
3
» Arrêter le partage de code sur clef
USB (ou Slack aussi, on est en 2017 !)
» Avoir un suivi de son code
» Travailler à plusieurs sur un projet
» Gérer les conflits entre deux parties
?
??
Les bases
Sommaire
1
2
3
4
Nommage des branches,
publication des modifications
Les outils et processus
complémentaires
L’interaction humaine et la
responsabilité
4
1.
LES BASES
» Des modifications de code
» Un message explicatif
» Un coupable (== un auteur / un dev / votre chat)
» Une signature
» Pointeur vers le commit parent
6
Les commits
Qu’est-ce-qu’un commit ?
6
Un bon commit est un commit atomique :
7
Il ne concerne
qu’une chose et
une seule
(bug fix / partie
d’une grosse
feature)
Il est le plus petit
possible
(tout en restant
cohérent)
Les commits 7
8
Les commits
1. Je développe en modifiant / déplaçant / supprimant mes fichiers
2. Quand une série de modifications est cohérente et digne d'être
commit, on la place en staging : git add, git commit, git reset, git
checkout, git diff (--cached)
3. Je vérifie mon staging et je commit
4. On répète l’opération autant de fois que nécessaire
8
NOMMAGE DES
BRANCHES, PUBLICATION
DES MODIFICATIONS
2.
Qu’est ce qu’une branche ?
» Une suite de commits
» Une fonctionnalité en cours
Quel intérêt ?
» Découper le projet
» Isoler une fonctionnalité
» Développer en parallèle
10
Les branches 10
» Une branche principale de
référence
» Une branche dédiée pour
chaque nouveau “chantier” :
(ex) stage_signature ou
responsive_design ou beer_time
» On met à jour sa branche si la
branche de référence a évoluée :
et on rebase !
11
Les branches 11
Réunir les sous branches dans la branche principale
Merge ou rebase ?
Et maintenant ?
12
» Deux écoles de pensées
» Quelles sont les principales différences ?
13
Merge vs rebase 13
D’un côté le code en prod, de
l’autre le code du dev : qui fait
des modifs depuis 3 semaines
sur une version obsolète ...
» Pro : Un unique commit
regroupant tous les
commits de deux
branches
» Con : Arbre rapidement
illisible par le
développeur qui est
responsable de la fusion
14
Merge : vous aussi vous aimez les plans de
métro ?
14
15
Rebase or not rebase : we solved the question !
» Toujours être à jour avec le code qu’on
veut faire évoluer
» Pouvoir tracer la raison et l’auteur de
l’ajout d’une ligne dans un fichier
» Contrôle total du chef de projet : Fast
Forward
15
16
GIT Urgency !
» Oups, j’ai commit un mot
de passe critique
» B******l mais où sont mes
modifs, y en a pour des
heures de travail
16
17
Corriger un commit
» Un commit ne peut être modifié
» Il faut faire un autre commit à côté
» Il faut référencer ce nouveau commit à partir d’une branche ou
d’un commit enfant
» Attention, ça impose un push --force si vous avez déjà
référencé cette branche sur l’origin
» Si le commit a été push, c’est trop tard, il est déjà fetch
quelque part
» Vous pouvez faire un git prune sur le serveur pour nettoyer les
commits non référencés
17
18
Stash
» Votre travail est en “dépôt” (stash), c’est un peu comme une
retenue mathématique le temps de faire une opération, vous
pouvez le récupérer en faisant un stash pop. Attention, Tortoise Git
fait un stash save avant un rebase. Si le rebase plante, le stash pop
n’est pas automatique.
» Votre travail est dans un commit et vous avez checkout une autre
révision
» Vous avez perdu le pointeur sur votre commit
» Vous avez choisi de faire un checkout --hard car y’avait trop de
conflits, pas cool ! Votre seule chance est dans le Ctrl-Z de votre
IDE. Fallait commit avant.
18
3.
L’INTERACTION HUMAINE
ET LA RESPONSABILITÉ
Qu’est ce qu’une pull request ?
» Ce n’est pas une feature GIT, c’est
un workflow humain:
» Il faut demander au chef de projet
d’intégrer votre évolution du code
partagé, qu’il va publier au nom
du projet.
» Il va faire une “code review” et
émettre des commentaires … ou il
va devra assumer les
conséquences de votre code.
20
Pull request (ou merge request) 20
Les outils de versioning
En ligne de
commande
Tortoise GIT Source Tree
21
22
GIT en ligne de commande
» git checkout [-b] “NOM_BRANCHE” (master / preprod)
» git branch “NOM_BRANCHE”
» git pull [--rebase] origin “NOM_BRANCHE”
» git rebase [--continue]
» git stash (pop)
» git commit -m “comment”
22
23
GIT en ligne de commande
» git add [-p]
» git ignore
» git log [--decorate] (et aussi git status)
» git push origin “ma_branche”
» git reset [--soft|--mixed|--hard]
» git fetch et git remote-update
» cat .git/refs/heads/master
23
4.
LES OUTILS ET PROCESSUS
COMPLÉMENTAIRES
Combien ça coûte ? quel services fournis ?
» Coût / Giga
» Coût / projet
» Coût / développeur
» Coût / installation
» Coût de maintenance
25
GitHub, BitBucket || GitLab || Git ? 25
» Connexion avec un channel SLACK :
Tout le monde est averti de la nouvelle release qui a été intégrée
au code, consultation aisée pour une revue de code en ouvrant
directement dans GitLab.
» Ouvertures sur le déploiement continu :
Buildbot
» Configuration des autorisations sur les branches principales
26
Ouvertures : les Hooks 26
Bibliographie
http://blog.seemios.fr/git-rebase-ou-git-merge-un-choix-cornelien/
https://www.atlassian.com/git/tutorials/using-branches/git-merge
http://www.columbia.edu/~zjn2101/intermediate-git/#25
https://www.atlassian.com/git/tutorials/merging-vs-rebasing
Pour commencer : https://www.miximum.fr/blog/enfin-comprendre-git/
Le blog de BigInt : https://bigint.fr/blog
Le github de BigInt : https://github.com/BigInt-NCY/
27
27

Git : Deux écoles de pensées, merge vs rebase

  • 1.
    CONFERENCE GIT Archibald Picq- Jean-Christophe Baudier Fabien Casters - Julien Smolareck @BigInt_Nancy05 apr. 2017
  • 2.
  • 3.
    Pourquoi utiliser unoutil de versioning ? 3 » Arrêter le partage de code sur clef USB (ou Slack aussi, on est en 2017 !) » Avoir un suivi de son code » Travailler à plusieurs sur un projet » Gérer les conflits entre deux parties ? ??
  • 4.
    Les bases Sommaire 1 2 3 4 Nommage desbranches, publication des modifications Les outils et processus complémentaires L’interaction humaine et la responsabilité 4
  • 5.
  • 6.
    » Des modificationsde code » Un message explicatif » Un coupable (== un auteur / un dev / votre chat) » Une signature » Pointeur vers le commit parent 6 Les commits Qu’est-ce-qu’un commit ? 6
  • 7.
    Un bon commitest un commit atomique : 7 Il ne concerne qu’une chose et une seule (bug fix / partie d’une grosse feature) Il est le plus petit possible (tout en restant cohérent) Les commits 7
  • 8.
    8 Les commits 1. Jedéveloppe en modifiant / déplaçant / supprimant mes fichiers 2. Quand une série de modifications est cohérente et digne d'être commit, on la place en staging : git add, git commit, git reset, git checkout, git diff (--cached) 3. Je vérifie mon staging et je commit 4. On répète l’opération autant de fois que nécessaire 8
  • 9.
  • 10.
    Qu’est ce qu’unebranche ? » Une suite de commits » Une fonctionnalité en cours Quel intérêt ? » Découper le projet » Isoler une fonctionnalité » Développer en parallèle 10 Les branches 10
  • 11.
    » Une brancheprincipale de référence » Une branche dédiée pour chaque nouveau “chantier” : (ex) stage_signature ou responsive_design ou beer_time » On met à jour sa branche si la branche de référence a évoluée : et on rebase ! 11 Les branches 11
  • 12.
    Réunir les sousbranches dans la branche principale Merge ou rebase ? Et maintenant ? 12
  • 13.
    » Deux écolesde pensées » Quelles sont les principales différences ? 13 Merge vs rebase 13
  • 14.
    D’un côté lecode en prod, de l’autre le code du dev : qui fait des modifs depuis 3 semaines sur une version obsolète ... » Pro : Un unique commit regroupant tous les commits de deux branches » Con : Arbre rapidement illisible par le développeur qui est responsable de la fusion 14 Merge : vous aussi vous aimez les plans de métro ? 14
  • 15.
    15 Rebase or notrebase : we solved the question ! » Toujours être à jour avec le code qu’on veut faire évoluer » Pouvoir tracer la raison et l’auteur de l’ajout d’une ligne dans un fichier » Contrôle total du chef de projet : Fast Forward 15
  • 16.
    16 GIT Urgency ! »Oups, j’ai commit un mot de passe critique » B******l mais où sont mes modifs, y en a pour des heures de travail 16
  • 17.
    17 Corriger un commit »Un commit ne peut être modifié » Il faut faire un autre commit à côté » Il faut référencer ce nouveau commit à partir d’une branche ou d’un commit enfant » Attention, ça impose un push --force si vous avez déjà référencé cette branche sur l’origin » Si le commit a été push, c’est trop tard, il est déjà fetch quelque part » Vous pouvez faire un git prune sur le serveur pour nettoyer les commits non référencés 17
  • 18.
    18 Stash » Votre travailest en “dépôt” (stash), c’est un peu comme une retenue mathématique le temps de faire une opération, vous pouvez le récupérer en faisant un stash pop. Attention, Tortoise Git fait un stash save avant un rebase. Si le rebase plante, le stash pop n’est pas automatique. » Votre travail est dans un commit et vous avez checkout une autre révision » Vous avez perdu le pointeur sur votre commit » Vous avez choisi de faire un checkout --hard car y’avait trop de conflits, pas cool ! Votre seule chance est dans le Ctrl-Z de votre IDE. Fallait commit avant. 18
  • 19.
  • 20.
    Qu’est ce qu’unepull request ? » Ce n’est pas une feature GIT, c’est un workflow humain: » Il faut demander au chef de projet d’intégrer votre évolution du code partagé, qu’il va publier au nom du projet. » Il va faire une “code review” et émettre des commentaires … ou il va devra assumer les conséquences de votre code. 20 Pull request (ou merge request) 20
  • 21.
    Les outils deversioning En ligne de commande Tortoise GIT Source Tree 21
  • 22.
    22 GIT en lignede commande » git checkout [-b] “NOM_BRANCHE” (master / preprod) » git branch “NOM_BRANCHE” » git pull [--rebase] origin “NOM_BRANCHE” » git rebase [--continue] » git stash (pop) » git commit -m “comment” 22
  • 23.
    23 GIT en lignede commande » git add [-p] » git ignore » git log [--decorate] (et aussi git status) » git push origin “ma_branche” » git reset [--soft|--mixed|--hard] » git fetch et git remote-update » cat .git/refs/heads/master 23
  • 24.
    4. LES OUTILS ETPROCESSUS COMPLÉMENTAIRES
  • 25.
    Combien ça coûte? quel services fournis ? » Coût / Giga » Coût / projet » Coût / développeur » Coût / installation » Coût de maintenance 25 GitHub, BitBucket || GitLab || Git ? 25
  • 26.
    » Connexion avecun channel SLACK : Tout le monde est averti de la nouvelle release qui a été intégrée au code, consultation aisée pour une revue de code en ouvrant directement dans GitLab. » Ouvertures sur le déploiement continu : Buildbot » Configuration des autorisations sur les branches principales 26 Ouvertures : les Hooks 26
  • 27.