45
Git

Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git

Page 2: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Plan

● Historique● Bases de Git● Premiers pas● Gestion des branches● Merging● Remotes● Workflows

Page 3: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Historique

Page 4: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Qu'est-ce qu'un VCS ?

● Enregistre les différentes version d'un ensemble de fichiers

● Gère la chronologie des différences entre les fichiers

● Retour arrière● Facilite le travail en équipe

Page 5: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Historique des VCS

● 1990 : CVS– Chaque fichier possède sa propre version

● 2000 : Subversion– Ensemble des fichiers ont un numéro de révision

– Commit atomiques

● 2005 : DVCS (Git, Mercurial, Bazaar)– Plus de serveur central

– Gestion facilité des branches et des merge

Page 6: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

DVCS

Centralisé (CVS, SVN) : Décentralisé (Git, Hg, Bazaar) :

Page 7: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

DVCS

● Chaque personne possède une copie du référentiel

● Rapide car chaque opération se fait en local● Permet de commiter en étant déconnecté● Permet d'expérimenter en local● Plus de point unique de défaillance● Permet une participation aisée (permissions)

Page 8: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Pourquoi Git ?

● Utilisé par la plupart des projets OpenSource : Linux, VLC, LibreOffice, Android, Firefox

● Facilité pour la création de branche et merge● Rapidité● GitHub, le SourceForge social

Page 9: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Bases de Git

Page 10: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Bases de Git

● 3 types d'objets

● Chaque objet est représenté par un SHA-1

Page 11: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Bases de Git

● Les principaux VCS enregistrent les différences :

● Git enregistre des snapshots du référentiel :

Page 12: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Bases de Git

● Après plusieurs commit :

Page 13: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Premiers pas

Page 14: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Initialisation du référentiel

git init

● Création d'un sous-répertoire .git unique à la racine du projet

Page 15: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Ajout de fichiers

git add

● Ajoute un ou plusieurs fichiers à l'index

Page 16: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Commit

git commit

● Enregistre les modifications présentent dans l'index

● Message de commit obligatoire

Page 17: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Commit (amend)

git commit --amend

● Met à jour le dernier commit● Possible uniquement s'il n'a pas déjà été

partagé sur un serveur

Page 18: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Gestion des branches

Page 19: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Gestion des branches

● Une branche est un simple pointeur vers un commit spécifique

● La branche par défaut est master● Le pointeur est avancé automatiquement à

chaque commit

Page 20: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Création d'une branche

git branch branch-name

● Création d'un nouveau pointeur branch-name sur le commit courant

Page 21: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Branche courante

● Git gère un pointeur spécifique : HEAD● HEAD pointe sur la branche courante

Page 22: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Changement de branche

git checkout branch-name

● Déplacement de HEAD sur branch-name

Page 23: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Modifications sur les branches

git commit

● Déplacement du pointeur courant sur le nouveau commit

Page 24: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Modifications sur les branches

git checkout master

git commit

● Divergence de l'historique du projet

Page 25: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Merging

Page 26: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Situation initiale

● 3 branches– master : version courante

– iss53 : travail en cours sur un ticket

– hotfix : bug bloquant à corriger

Page 27: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Merge « fast forward »

git checkout master

git merge hotfix

Page 28: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Merge « fast forward »

git branch -d hotfix

git checkout iss53

git commit

Page 29: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Merge classique

git checkout master

git merge iss53

Page 30: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Rebase

git checkout experiment

git rebase master

Page 31: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Remotes

Page 32: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Clone

git clone repository

Page 33: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Clone

● Récupération de tous les objets du référentiel distant

● Création d'une branche locale : origin/master● Pointeur vers la branche master du serveur● Impossible de déplacer la branche

Page 34: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Push

git push remote branch

Page 35: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Fetch

git fetch remote

Page 36: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Pull

git pull remote

● git fetch + git merge● utile si aucune modification faite en locale

Page 37: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Workflows

Page 38: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Branches

● une branche master stable avec tags● une branche de développement● une branche par fonctionnalité

Page 39: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Centralisé

● chaque développeur utilise un référentiel partagé (similaire à SVN)

Page 40: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Integration manager (GitHub)

● le mainteneur du projet publie dans un repository de référence

● un contributeur clone ce référentiel et publie ses modifications dans son référentiel public

● le contributeur envoi un e-mail au mainteneur pour qu'il récupère ses changements

● le mainteneur intègre les modifications du contributeur dans son référentiel local

● le mainteneur publie dans le repository de référence

Page 41: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Dictateur et lieutenants (Linux)

● les développeurs travaillent sur leurs branches et se synchronise avec le repo de référence

● les lieutenants mergent le travail des développeurs dans leur branche master

● le dictateur merge les branches master des lieutenants

● le dictateur publie dans le repo de référence

Page 42: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Conclusion

Page 43: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Git, l'essayer c'est l'adopter

● Rapide● Branche et merge facilité● Historique clair

● Difficulté de prise en main

Page 44: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Q&A

Page 45: Git - Alexandre Thomazo · 2012-11-15 · Git Alexandre Thomazo Integration manager (GitHub) le mainteneur du projet publie dans un repository de référence un contributeur clone

Git Alexandre Thomazo

Crédits

● Images tirées du site : http://git-scm.com/book● Template inspiré de

http://antoniogoncalves.org/