SlideShare une entreprise Scribd logo
Découvrir et utiliser Git
Le logiciel de gestion de versions décentralisé
Sébastien Combéfis 1,2 Julien Gomez 1
1 Université catholique de Louvain – École Polytechnique de Louvain
2 École Centrale des Arts et Métiers
10 octobre 2014
UCLouvain
ACM Student Chapter
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Source Code Management
Pour tout projet informatique, il faut une stratégie de backup
On ajoute souvent une gestion des versions
Un développeur peut proposer plusieurs révisions par jour
Source Code Manager (SCM)
Version Control System (VCS)
Revision Control System (RCS)
3
Historique des gestionnaires de version
http://codicesoftware.blogspot.com/2010/11/version-control-timeline.html
SCCS
1972
RCS
1982
CVS
1990
Subversion
2000
Bazaar
2005
Mercurial
2005
Git
2005
4
“Without some sort of version control system
in place, you can’t reasonably call yourself a
software engineer.” — Jeff Atwood
“Without some sort of version control system
in place, you can’t reasonably call yourself a
software engineer.” — Jeff Atwood
Buts d’un gestionnaire de versions
Gestion d’un projet de programmation
Garder l’historique de toutes les modifications
Travail en équipe
Support de branches de développement
6
Git
Système inventé par Linus Torvalds pour le kernel Linux
Git a vu le jour en avril 2005
Premier commit le 8 avril
Logiciel de gestion de versions décentralisé
Connexion internet uniquement pour les pull et push
7
Prononciation
[ gít ] [ jít ]
8
Prononciation
[ gít ] [ jít ]
 
8
Pourquoi git ?
9
Pourquoi git ?
9
Git avec un serveur central
Accès en écriture pour tous les développeurs
Serveur central
Développeur A Développeur B
push
pull pull
push
10
Git décentralisé
Accès en écriture seulement pour les mainteneurs
Les contributeurs font des pull requests
Serveur
Contributeur
Serveur principal
Mainteneur
push
pull
push
pull request
11
Première partie I
Les bases de Git
Dépôt local
Toutes les données sont toujours dans un dépôt local
Création d’un nouveau projet
$ mkdir myproject
$ cd myproject /
$ g i t i n i t
Repartir d’un projet existant
$ g i t clone git://www. example . net / a p r o j e c t
$ cd a p r o j e c t /
13
Répertoire .git
Git maintient un répertoire .git unique à la racine du projet
$ l s . git/
HEAD c o n f i g hooks o b j e c t s
branches d e s c r i p t i o n i n f o r e f s
Copie intégrale des données en local
Accès à tout l’historique des modifications
14
États des fichiers I
Un fichier doit être explicitement ajouté au dépôt Git
Untracked
Modified
Staged Committed
git add git commit
Espace de travail Zone de transit Dépôt Git
15
États des fichiers II
Untracked/Modified
Nouveaux fichiers ou fichiers modifiés
Pas pris en compte pour le prochain commit
Staged
Fichiers ajoutés, modifiés, supprimés ou déplacés
Pris en compte pour le prochain commit
Unmodified/Committed
Aucune modification pour le prochain commit
16
Ajout d’un fichier au dépôt
Création d’un nouveau fichier (État : untracked)
$ echo ’ H e l l o World ! ’  README
$ g i t s t a t u s
# On branch master
#
# I n i t i a l commit
#
# Untracked f i l e s :
# ( use git add f i l e  . . .  to i n c l u d e i n what w i l l be
# committed )
#
# README
nothing added to commit but untracked f i l e s p r e s e n t
( use git add to t r a c k )
17
Ajout d’un fichier au dépôt
Ajout du fichier dans la zone de transit (État : staged)
$ g i t add README
$ g i t s t a t u s
# On branch master
#
# I n i t i a l commit
#
# Changes to be committed :
# ( use git rm --cached f i l e  . . .  to unstage )
#
# new file : README
#
17
Ajout d’un fichier au dépôt
Création du commit (État : committed)
$ g i t commit −m  Premier commit
[ master ( root −commit) 80 eac39 ] Premier commit
1 f i l e changed , 1 i n s e r t i o n (+)
c r e a t e mode 100644 README
$ g i t s t a t u s
# On branch master
nothing to commit ( working d i r e c t o r y c l e a n )
$ g i t log
commit 80eac39fb449e6c93cc614cb9fb2b12c36f907ce
Author : S é b a s t i e n Combéfis seb478@gmail . com
Date : Tue Oct 7 21:22:21 2014 +0200
Premier commit
17
Commandes de base
Ajouter un fichier dans la zone de transit
git add fichier
Obtenir l’état des fichiers
git status
Valider les modifications en créant un commit
git commit -m Titre du commit
Obtenir l’historique des commits
git log
18
Modifier des fichiers dans le dépôt
Modifier un fichier dans l’espace de travail
$ echo ’ This i s me! ’  README
$ g i t add README
$ g i t commit −m  Mise à j o u r README
[ master c269f67 ] Mise à j o u r README
1 f i l e s changed , 1 i n s e r t i o n (+)
$ g i t log
commit c269f67f00089e9b9eaf7d06d4d8e8e291b2e929
Author : S é b a s t i e n Combéfis seb478@gmail . com
Date : Tue Oct 7 22:34:06 2014 +0200
Mise à j o u r README
commit 80eac39fb449e6c93cc614cb9fb2b12c36f907ce
Author : S é b a s t i e n Combéfis seb478@gmail . com
Date : Tue Oct 7 21:22:21 2014 +0200
Premier commit
19
Informations sur un commit
On peut consulter les informations sur un commit spécifié
git show tout court pour les informations du dernier commit
$ g i t show c269f67f00089e9b9eaf7d06d4d8e8e291b2e929
commit c269f67f00089e9b9eaf7d06d4d8e8e291b2e929
Author : S é b a s t i e n Combéfis seb478@gmail . com
Date : Tue Oct 7 22:34:06 2014 +0200
Mise à j o u r README
d i f f --git a/README b/README
index 980 a0d5 . . 2 0 a5ble 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
H e l l o World !
+This is me !
20
Résumé des commandes
Afficher l’aide de Git
git help
Créer un nouveau dépôt
git init et git clone
Afficher des informations
git status, git log et git diff
Placer des modifications en zone de transit
git add, git rm et git mv
Valider les modifications en zone de transit
git commit
21
Configuration de Git
De nombreux paramètres sont configurables
Nom et e-mail du commiteur...
Configuration avec la commande « git config »
Plusieurs niveaux de configuration
.git/config : pour le dépôt (--file)
~/.gitconfig : pour l’utilisateur (--global)
/etc/gitconfig : pour toute la machine (--system)
$ g i t c o n f i g -- g l o b a l u s e r . name  S é b a s t i e n Combéfis 
$ g i t c o n f i g -- g l o b a l u s e r . email  seb478@gmail . com
22
Dans les coulisses
Un dépôt Git est une base de données avec deux structures principales
Git stocke une série d’objets dans un store
Chaque version de chaque fichier est représentée par un blob
Un tree représente un niveau de hiérarchie de fichiers
Les changements des fichiers sont stockés dans un commit
Les tags associent un nom lisible à un objet du store
Git stocke des informations sur l’espace de travail et sur le dépôt
dans un index
23
Les objets Git
author Seb
tree 82d19a2
Initial commit
blob e9a27c
blob 83cd2e
Hello
World!
This
is me!
v1.0 master
tag 931ea9
commit 91e2b2
branch name
tree 82d19a2
blob e9a27c blob 83cd2e
24
Les objets Git
author Seb
tree 82d19a2
Initial commit
blob e9a27c
blob 83cd2e
Hello
World!
This
is me!
v1.0
tag 931ea9
commit 91e2b2
tree 82d19a2
blob e9a27c blob 83cd2e
author Seb
tree 6923e8
parent 91e2b2
Correction
master
tree 603c2b
blob e9a27c
blob 83cd2e
blob 61c89a Wow!
commit 371ae7
branch name
tree 6923e8
tree 603c2b
blob 61c89a
24
Système de stockage adressable par contenu
Tout objet du store est adressable par son contenu
Le nom unique de chaque objet est obtenu avec SHA-1
Valeur sur 160 bits (nombre hexadécimal avec 40 chiffres)
Toute modification de contenu produira un changement du SHA-1
Git traque le contenu : Content Tracker System
Deux fichiers identiques n’auront qu’un blob dans le store
25
Deuxième partie II
Gestion des branches
Le concept de branche
Une branche pointe vers un commit
À chaque nouveau commit, le pointeur de branche avance
Un commit pointe vers le commit parent
82ea19
master
27
Le concept de branche
Une branche pointe vers un commit
À chaque nouveau commit, le pointeur de branche avance
Un commit pointe vers le commit parent
82ea19 cd27e1
master
27
Le concept de branche
Une branche pointe vers un commit
À chaque nouveau commit, le pointeur de branche avance
Un commit pointe vers le commit parent
82ea19 cd27e1 98173c
master
27
Création d’une nouvelle branche
Une nouvelle branche est créée avec « git branch name »
$ g i t branch t e s t
82ea19 cd27e1 98173c
master
test
28
Branche courante
La commande « git branch » liste les branches existantes
$ g i t branch
∗ master
t e s t
La branche courante est identifiée par HEAD
82ea19 cd27e1 98173c
master
test
HEAD
29
Changer de branche
La commande « git checkout name » change de branche
$ g i t checkout t e s t
Switched to branch ’ te st ’
La branche courante est identifiée par HEAD
82ea19 cd27e1 98173c
master
testHEAD
30
Commit sur une branche
Un commit va toujours se faire sur la branche courante
. . .
$ g i t commit . . .
$ g i t checkout master
. . .
$ g i t commit . . .
82ea19 cd27e1 98173c
master
testHEAD
31
Commit sur une branche
Un commit va toujours se faire sur la branche courante
. . .
$ g i t commit . . .
$ g i t checkout master
. . .
$ g i t commit . . .
82ea19 cd27e1 98173c
ab716e
master
testHEAD
31
Commit sur une branche
Un commit va toujours se faire sur la branche courante
. . .
$ g i t commit . . .
$ g i t checkout master
. . .
$ g i t commit . . .
82ea19 cd27e1 98173c
ab716e 716ea4
master
testHEAD
31
Commit sur une branche
Un commit va toujours se faire sur la branche courante
. . .
$ g i t commit . . .
$ g i t checkout master
. . .
$ g i t commit . . .
82ea19 cd27e1 98173c
ab716e 716ea4
master
test
HEAD
31
Commit sur une branche
Un commit va toujours se faire sur la branche courante
. . .
$ g i t commit . . .
$ g i t checkout master
. . .
$ g i t commit . . .
82ea19 cd27e1 98173c
62eac3
ab716e 716ea4
test
masterHEAD
31
Opérations de base sur une branche
On peut supprimer une branche avec l’option -d
$ g i t branch −d t e s t
Deleted branch t e s t ( was 617 a041 ) .
On peut renommer une branche avec l’option -m
$ g i t branch
∗ master
t e s t
$ g i t branch −m t e s t a l t e r n a t i v e
$ g i t branch
a l t e r n a t i v e
∗ master
32
Fusion de branches
On peut fusionner deux branches pour en combiner les modifications
La fusion se fait vers la branche courante
On doit associer un message lors d’une fusion
Une fusion est un commit qui agrège plusieurs modifications
$ g i t merge t e s t
Merge made by the ’ r e c u r s i v e ’ s t r a t e g y .
ABOUT | 1 +
AUTHORS | 1 +
2 f i l e s changed , 2 i n s e r t i o n s (+)
c r e a t e mode 100644 ABOUT
c r e a t e mode 100644 AUTHORS
33
Fusion de branches
La branche courante ne change pas après une fusion
La branche fusionnée continue d’exister
82ea19 cd27e1 98173c
62eac3
ab716e 716ea4
886ca5
master
test
HEAD
33
Gestion de conflits I
Conflit lorsque deux branches à fusionner contiennent des
modifications sur le même fichier
Hello World!
Hello World!
This is me!
Hellow!
master
alt
34
Gestion de conflits II
Conflit détecté lors d’une demande de merge
$ g i t merge a l t
Auto−merging f i l e . t x t
CONFLICT ( content ) : Merge c o n f l i c t i n f i l e . t x t
Automatic merge f a i l e d ; f i x c o n f l i c t s and then
commit the r e s u l t .
$ g i t s t a t u s
# On branch master
# Unmerged paths :
# ( use  g i t add/rm f i l e  . . .  as a p p r o p r i a t e to
# mark r e s o l u t i o n )
#
# both modified : file.txt
#
35
Gestion de conflits III
Résolution manuelle du conflit suivie d’un commit
$ cat f i l e . t x t
 HEAD
H e l l o World !
This i s me!
=======
Hellow !
 a l t
36
Checkout interdit
On ne peut pas changer de branche n’importe quand
$ echo ’ H e l l o ! ’  me . t x t
$ g i t add me . t x t
$ g i t commit −m  I n i t i a l commit
$ g i t branch a l t
$ echo ’ I am God ’  me . t x t
$ g i t add me . t x t
$ g i t commit −m God i s t h e r e 
$ g i t checkout a l t
$ echo ’ I am d e v i l ’  me . t x t
$ g i t add me . t x t
$ g i t checkout master
e r r o r : Your l o c a l changes to the f o l l o w i n g f i l e s
would be o v e r w r i t t e n by checkout :
me . t x t
Please , commit your changes or stash them b e f o r e
you can switch branches .
Aborting
37
Stash
On peut vouloir changer de branche sans faire un commit
Sauvegarde des changements non-commités dans une pile
$ g i t stash
Saved working d i r e c t o r y and index s t a t e WIP on a l t :
818 ded5 I n i t i a l commit
HEAD i s now at 818 ded5 I n i t i a l commit
$ g i t checkout master
Switched to branch ’ master ’
$ g i t stash l i s t
stash@ {0}: WIP on a l t : 818 ded5 I n i t i a l commit
On récupère un élément sur la pile avec « git stash pop »
38
Modifier le dernier commit
Parfois on peut vouloir modifier le dernier commit
On utilise l’option --amend de la commande commit
$ g i t add . . .
$ g i t commit --amend −m  M o d i f i c a t i o n . . . 
39
Rebase
Un rebase permet de modifier l’endroit où des commits sont
basés
82ea19 cd27e1 98173c
62eac3
master
ab716e 716ea4
testHEAD 40
Rebase
Un rebase permet de modifier l’endroit où des commits sont
basés
$ g i t checkout t e s t
$ g i t rebase master
82ea19 cd27e1 98173c
62eac3
master
ab716e 716ea4
testHEAD
ab716e 716ea4
testHEAD
40
Comment utiliser les branches ?
Gérer différentes versions
Je maintiens une version v1.0 et je veux développer une v1.1
Gérer des phases de développement
J’ai un prototype, une beta, une version stable...
Gérer et corriger un bug
Une branche pour une tâche particulière bien définie
Gérer la contribution d’un développeur spécifique
41
Troisième partie III
Dépôt distant
Dépôt distant
Un remote est une référence vers un dépôt distant
Lors d’un clone, par défaut la référence est origin
$ g i t clone h t t p s :// github . com/git/git . git
$ g i t remote
o r i g i n
$ g i t branch −a
∗ master
remotes / o r i g i n /HEAD − o r i g i n / master
remotes / o r i g i n / maint
remotes / o r i g i n / master
remotes / o r i g i n / next
remotes / o r i g i n /pu
remotes / o r i g i n / todo
43
Charger des commits
Charger des commits depuis le dépôt distant vers le local
git pull remote branch
$ g i t fetch o r i g i n
$ g i t merge o r i g i n / master
82ea19 cd27e1 98173c
origin/master
masterHEAD
44
Charger des commits
Charger des commits depuis le dépôt distant vers le local
git pull remote branch
$ g i t fetch o r i g i n
$ g i t merge o r i g i n / master
82ea19 cd27e1 98173c
ab716e 716ea4origin/master
origin/master
masterHEAD
44
Charger des commits
Charger des commits depuis le dépôt distant vers le local
git pull remote branch
$ g i t fetch o r i g i n
$ g i t merge o r i g i n / master
82ea19 cd27e1 98173c
ab716e 716ea4
origin/master
masterHEAD
masterHEAD
44
Envoyer des commits
Envoyer des commits depuis le dépôt local vers le distant
git push remote branch
$ g i t push o r i g i n master
82ea19 cd27e1 98173c
ab716e 716ea4origin/master
masterHEAD
45
Envoyer des commits
Envoyer des commits depuis le dépôt local vers le distant
git push remote branch
$ g i t push o r i g i n master
82ea19 cd27e1 98173c
ab716e 716ea4origin/master
origin/master
masterHEAD
45
Quatrième partie IV
Divers
Définir un tag
Un tag est une étiquette lisible pour identifier un commit
$ g i t tag −m  Première v e r s i o n  V1 .0 80 eac39
$ g i t tag
V1 .0
On peut utiliser le tag à la place du hash SHA-1 du commit
$ g i t show V1 .0
tag V1.0
Tagger : S é b a s t i e n Combéfis seb478@gmail . com
Date : F r i Oct 10 15:53:12 2014 +0200
Première v e r s i o n
commit 80eac39fb449e6c93cc614cb9fb2b12c36f907ce
Author : S é b a s t i e n Combéfis seb478@gmail . com
Date : Tue Oct 7 21:22:21 2014 +0200
Premier commit
47
Historique des modifications d’un fichier
La commande « git show » permet de voir un fichier dans un
commit spécifié
$ g i t show 80 eac39 : t e s t . t x t
H e l l o World !
This i s to show how git show works !
La commande « git blame » donne des informations de
modification sur un fichier
$ g i t blame t e s t . t x t
^400 fda6 ( S é b a s t i e n Combéfis 2014−10−10
15:50:25 +0200 1) H e l l o
48
Description d’un commit
Lorsqu’on fait un commit, on spécifie son titre avec l’option -m
$ g i t commit −m  T i t r e du commit
En ne précisant pas le -m, on a accès à l’éditeur avancé
49
Nettoyer l’espace de travail
Supprimer les modifications dans l’espace de travail
$ g i t stash save --keep−index
$ g i t stash drop
Revenir juste après le dernier commit
$ g i t r e s e t --hard HEAD
Remet le pointeur de la branche courante sur HEAD
Remet l’espace de travail et l’index comme sur HEAD
50
Compresser le dépôt Git
Au fur et à mesure des commits, le dépôt Git s’alourdit
Git possède un ramasse-miettes (garbage collector)
Nettoyage des fichiers plus nécessaires
Optimisation de l’utilisation de l’espace disque
Compression des fichiers de révision
$ g i t gc
51
Ignorer des fichiers
Git peut ignorer des fichiers du répertoire de travail
Le fichier .gitignore contient les fichiers à ignorer
∗. c l a s s
# Mobile Tools f o r Java (J2ME)
. mtj . tmp/
# Package F i l e s #
∗. j a r
∗. war
∗. ear
# v i r t u a l machine crash logs ,
# see http ://www. j a v a . com/en/ download / help / e r r o r _ h o t s p o t . xml
hs_err_pid ∗
52
Livres de référence
ISBN 978-0-596-52012-0 ISBN 978-1-934-35615-9
53
Ressources en ligne
http://www.git-scm.com/
Site web officiel
http://pcottle.github.io/learnGitBranching/
Apprendre Git et la gestion des branches de manière ludique
https://github.com/github/gitignore
Exemples de fichiers .gitignore
54
Crédits
https://www.flickr.com/photos/landschaft/3658612324/
https://openclipart.org/detail/36565/tango-network-server-by-warszawianka
https://openclipart.org/detail/34531/tango-computer-by-warszawianka
Photos des livres depuis Amazon
55

Contenu connexe

Tendances

Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
ENSET, Université Hassan II Casablanca
 
Tutorial Git
Tutorial GitTutorial Git
Cours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observerCours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observer
ENSET, Université Hassan II Casablanca
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
ENSET, Université Hassan II Casablanca
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
webreaker
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
Abdelouahed Abdou
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
Pierre Sudron
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
ENSET, Université Hassan II Casablanca
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
 
Intelligence Artificielle - Systèmes experts
Intelligence Artificielle - Systèmes expertsIntelligence Artificielle - Systèmes experts
Intelligence Artificielle - Systèmes experts
Mohamed Heny SELMI
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
ENSET, Université Hassan II Casablanca
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHub
Thibault Vlacich
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
ENSET, Université Hassan II Casablanca
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nuls
Malk Zameth
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
ENSET, Université Hassan II Casablanca
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
ENSET, Université Hassan II Casablanca
 

Tendances (20)

Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
Conférence: Catalyseurs de l'Intelligence Artificielle et Écosystème des Fram...
 
Tutorial Git
Tutorial GitTutorial Git
Tutorial Git
 
Cours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observerCours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observer
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Intelligence Artificielle - Systèmes experts
Intelligence Artificielle - Systèmes expertsIntelligence Artificielle - Systèmes experts
Intelligence Artificielle - Systèmes experts
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHub
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nuls
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 

En vedette

Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
Med Zaibi
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
ECAM Brussels Engineering School
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
ECAM Brussels Engineering School
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
ECAM Brussels Engineering School
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
ECAM Brussels Engineering School
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
ECAM Brussels Engineering School
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
ECAM Brussels Engineering School
 
la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...
najwa sabouk
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
ECAM Brussels Engineering School
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
ECAM Brussels Engineering School
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
ECAM Brussels Engineering School
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
ECAM Brussels Engineering School
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
ECAM Brussels Engineering School
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
ECAM Brussels Engineering School
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 

En vedette (20)

Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 
Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...la contribution de la résilience organisationnelle et l'agilité organisationn...
la contribution de la résilience organisationnelle et l'agilité organisationn...
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 

Similaire à Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé

3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
NourFrioui
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratique
Rossi Oddet
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
ECAM Brussels Engineering School
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
mouad55
 
Git and Github.pptx
Git and Github.pptxGit and Github.pptx
Git and Github.pptx
nnomokoarmel20
 
Débuter avec Git & github
Débuter avec Git & githubDébuter avec Git & github
Débuter avec Git & github
Monoem Youneb
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de git
Julien Blin
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
SimpleLearn1
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
GIT Fundamentals
GIT FundamentalsGIT Fundamentals
GIT Fundamentals
Abderrazak BOUADMA
 
Git pratique
Git pratiqueGit pratique
Git pratique
quicky_osm
 
Git pratique
Git pratiqueGit pratique
Git pratique
quicky_osm
 
Introduction à git
Introduction à gitIntroduction à git
Introduction à git
Yann Sionneau
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
goldoraf
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
msadouni
 
Travailler avec git et eclipse
Travailler avec git et eclipseTravailler avec git et eclipse
Travailler avec git et eclipse
Francois ANDRE
 
Pourquoi versionner ses githooks.pdf
Pourquoi versionner ses githooks.pdfPourquoi versionner ses githooks.pdf
Pourquoi versionner ses githooks.pdf
Chris Saez
 
Brown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tousBrown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tous
Cedric Gatay
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
Pape Diop
 
Comment maitriser git et produire de beaux commits
Comment maitriser git et produire de beaux commitsComment maitriser git et produire de beaux commits
Comment maitriser git et produire de beaux commits
Julien Maitrehenry
 

Similaire à Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé (20)

3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratique
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
 
Git and Github.pptx
Git and Github.pptxGit and Github.pptx
Git and Github.pptx
 
Débuter avec Git & github
Débuter avec Git & githubDébuter avec Git & github
Débuter avec Git & github
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de git
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
GIT Fundamentals
GIT FundamentalsGIT Fundamentals
GIT Fundamentals
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Introduction à git
Introduction à gitIntroduction à git
Introduction à git
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
Travailler avec git et eclipse
Travailler avec git et eclipseTravailler avec git et eclipse
Travailler avec git et eclipse
 
Pourquoi versionner ses githooks.pdf
Pourquoi versionner ses githooks.pdfPourquoi versionner ses githooks.pdf
Pourquoi versionner ses githooks.pdf
 
Brown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tousBrown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tous
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
 
Comment maitriser git et produire de beaux commits
Comment maitriser git et produire de beaux commitsComment maitriser git et produire de beaux commits
Comment maitriser git et produire de beaux commits
 

Plus de ECAM Brussels Engineering School

Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
ECAM Brussels Engineering School
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
ECAM Brussels Engineering School
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
ECAM Brussels Engineering School
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
ECAM Brussels Engineering School
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
ECAM Brussels Engineering School
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
ECAM Brussels Engineering School
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
ECAM Brussels Engineering School
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
ECAM Brussels Engineering School
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
ECAM Brussels Engineering School
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
ECAM Brussels Engineering School
 

Plus de ECAM Brussels Engineering School (13)

Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 

Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé

  • 1. Découvrir et utiliser Git Le logiciel de gestion de versions décentralisé Sébastien Combéfis 1,2 Julien Gomez 1 1 Université catholique de Louvain – École Polytechnique de Louvain 2 École Centrale des Arts et Métiers 10 octobre 2014 UCLouvain ACM Student Chapter
  • 2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
  • 3. Source Code Management Pour tout projet informatique, il faut une stratégie de backup On ajoute souvent une gestion des versions Un développeur peut proposer plusieurs révisions par jour Source Code Manager (SCM) Version Control System (VCS) Revision Control System (RCS) 3
  • 4. Historique des gestionnaires de version http://codicesoftware.blogspot.com/2010/11/version-control-timeline.html SCCS 1972 RCS 1982 CVS 1990 Subversion 2000 Bazaar 2005 Mercurial 2005 Git 2005 4
  • 5. “Without some sort of version control system in place, you can’t reasonably call yourself a software engineer.” — Jeff Atwood “Without some sort of version control system in place, you can’t reasonably call yourself a software engineer.” — Jeff Atwood
  • 6. Buts d’un gestionnaire de versions Gestion d’un projet de programmation Garder l’historique de toutes les modifications Travail en équipe Support de branches de développement 6
  • 7. Git Système inventé par Linus Torvalds pour le kernel Linux Git a vu le jour en avril 2005 Premier commit le 8 avril Logiciel de gestion de versions décentralisé Connexion internet uniquement pour les pull et push 7
  • 12. Git avec un serveur central Accès en écriture pour tous les développeurs Serveur central Développeur A Développeur B push pull pull push 10
  • 13. Git décentralisé Accès en écriture seulement pour les mainteneurs Les contributeurs font des pull requests Serveur Contributeur Serveur principal Mainteneur push pull push pull request 11
  • 14. Première partie I Les bases de Git
  • 15. Dépôt local Toutes les données sont toujours dans un dépôt local Création d’un nouveau projet $ mkdir myproject $ cd myproject / $ g i t i n i t Repartir d’un projet existant $ g i t clone git://www. example . net / a p r o j e c t $ cd a p r o j e c t / 13
  • 16. Répertoire .git Git maintient un répertoire .git unique à la racine du projet $ l s . git/ HEAD c o n f i g hooks o b j e c t s branches d e s c r i p t i o n i n f o r e f s Copie intégrale des données en local Accès à tout l’historique des modifications 14
  • 17. États des fichiers I Un fichier doit être explicitement ajouté au dépôt Git Untracked Modified Staged Committed git add git commit Espace de travail Zone de transit Dépôt Git 15
  • 18. États des fichiers II Untracked/Modified Nouveaux fichiers ou fichiers modifiés Pas pris en compte pour le prochain commit Staged Fichiers ajoutés, modifiés, supprimés ou déplacés Pris en compte pour le prochain commit Unmodified/Committed Aucune modification pour le prochain commit 16
  • 19. Ajout d’un fichier au dépôt Création d’un nouveau fichier (État : untracked) $ echo ’ H e l l o World ! ’ README $ g i t s t a t u s # On branch master # # I n i t i a l commit # # Untracked f i l e s : # ( use git add f i l e . . . to i n c l u d e i n what w i l l be # committed ) # # README nothing added to commit but untracked f i l e s p r e s e n t ( use git add to t r a c k ) 17
  • 20. Ajout d’un fichier au dépôt Ajout du fichier dans la zone de transit (État : staged) $ g i t add README $ g i t s t a t u s # On branch master # # I n i t i a l commit # # Changes to be committed : # ( use git rm --cached f i l e . . . to unstage ) # # new file : README # 17
  • 21. Ajout d’un fichier au dépôt Création du commit (État : committed) $ g i t commit −m Premier commit [ master ( root −commit) 80 eac39 ] Premier commit 1 f i l e changed , 1 i n s e r t i o n (+) c r e a t e mode 100644 README $ g i t s t a t u s # On branch master nothing to commit ( working d i r e c t o r y c l e a n ) $ g i t log commit 80eac39fb449e6c93cc614cb9fb2b12c36f907ce Author : S é b a s t i e n Combéfis seb478@gmail . com Date : Tue Oct 7 21:22:21 2014 +0200 Premier commit 17
  • 22. Commandes de base Ajouter un fichier dans la zone de transit git add fichier Obtenir l’état des fichiers git status Valider les modifications en créant un commit git commit -m Titre du commit Obtenir l’historique des commits git log 18
  • 23. Modifier des fichiers dans le dépôt Modifier un fichier dans l’espace de travail $ echo ’ This i s me! ’ README $ g i t add README $ g i t commit −m Mise à j o u r README [ master c269f67 ] Mise à j o u r README 1 f i l e s changed , 1 i n s e r t i o n (+) $ g i t log commit c269f67f00089e9b9eaf7d06d4d8e8e291b2e929 Author : S é b a s t i e n Combéfis seb478@gmail . com Date : Tue Oct 7 22:34:06 2014 +0200 Mise à j o u r README commit 80eac39fb449e6c93cc614cb9fb2b12c36f907ce Author : S é b a s t i e n Combéfis seb478@gmail . com Date : Tue Oct 7 21:22:21 2014 +0200 Premier commit 19
  • 24. Informations sur un commit On peut consulter les informations sur un commit spécifié git show tout court pour les informations du dernier commit $ g i t show c269f67f00089e9b9eaf7d06d4d8e8e291b2e929 commit c269f67f00089e9b9eaf7d06d4d8e8e291b2e929 Author : S é b a s t i e n Combéfis seb478@gmail . com Date : Tue Oct 7 22:34:06 2014 +0200 Mise à j o u r README d i f f --git a/README b/README index 980 a0d5 . . 2 0 a5ble 100644 --- a/README +++ b/README @@ -1 +1,2 @@ H e l l o World ! +This is me ! 20
  • 25. Résumé des commandes Afficher l’aide de Git git help Créer un nouveau dépôt git init et git clone Afficher des informations git status, git log et git diff Placer des modifications en zone de transit git add, git rm et git mv Valider les modifications en zone de transit git commit 21
  • 26. Configuration de Git De nombreux paramètres sont configurables Nom et e-mail du commiteur... Configuration avec la commande « git config » Plusieurs niveaux de configuration .git/config : pour le dépôt (--file) ~/.gitconfig : pour l’utilisateur (--global) /etc/gitconfig : pour toute la machine (--system) $ g i t c o n f i g -- g l o b a l u s e r . name S é b a s t i e n Combéfis $ g i t c o n f i g -- g l o b a l u s e r . email seb478@gmail . com 22
  • 27. Dans les coulisses Un dépôt Git est une base de données avec deux structures principales Git stocke une série d’objets dans un store Chaque version de chaque fichier est représentée par un blob Un tree représente un niveau de hiérarchie de fichiers Les changements des fichiers sont stockés dans un commit Les tags associent un nom lisible à un objet du store Git stocke des informations sur l’espace de travail et sur le dépôt dans un index 23
  • 28. Les objets Git author Seb tree 82d19a2 Initial commit blob e9a27c blob 83cd2e Hello World! This is me! v1.0 master tag 931ea9 commit 91e2b2 branch name tree 82d19a2 blob e9a27c blob 83cd2e 24
  • 29. Les objets Git author Seb tree 82d19a2 Initial commit blob e9a27c blob 83cd2e Hello World! This is me! v1.0 tag 931ea9 commit 91e2b2 tree 82d19a2 blob e9a27c blob 83cd2e author Seb tree 6923e8 parent 91e2b2 Correction master tree 603c2b blob e9a27c blob 83cd2e blob 61c89a Wow! commit 371ae7 branch name tree 6923e8 tree 603c2b blob 61c89a 24
  • 30. Système de stockage adressable par contenu Tout objet du store est adressable par son contenu Le nom unique de chaque objet est obtenu avec SHA-1 Valeur sur 160 bits (nombre hexadécimal avec 40 chiffres) Toute modification de contenu produira un changement du SHA-1 Git traque le contenu : Content Tracker System Deux fichiers identiques n’auront qu’un blob dans le store 25
  • 32. Le concept de branche Une branche pointe vers un commit À chaque nouveau commit, le pointeur de branche avance Un commit pointe vers le commit parent 82ea19 master 27
  • 33. Le concept de branche Une branche pointe vers un commit À chaque nouveau commit, le pointeur de branche avance Un commit pointe vers le commit parent 82ea19 cd27e1 master 27
  • 34. Le concept de branche Une branche pointe vers un commit À chaque nouveau commit, le pointeur de branche avance Un commit pointe vers le commit parent 82ea19 cd27e1 98173c master 27
  • 35. Création d’une nouvelle branche Une nouvelle branche est créée avec « git branch name » $ g i t branch t e s t 82ea19 cd27e1 98173c master test 28
  • 36. Branche courante La commande « git branch » liste les branches existantes $ g i t branch ∗ master t e s t La branche courante est identifiée par HEAD 82ea19 cd27e1 98173c master test HEAD 29
  • 37. Changer de branche La commande « git checkout name » change de branche $ g i t checkout t e s t Switched to branch ’ te st ’ La branche courante est identifiée par HEAD 82ea19 cd27e1 98173c master testHEAD 30
  • 38. Commit sur une branche Un commit va toujours se faire sur la branche courante . . . $ g i t commit . . . $ g i t checkout master . . . $ g i t commit . . . 82ea19 cd27e1 98173c master testHEAD 31
  • 39. Commit sur une branche Un commit va toujours se faire sur la branche courante . . . $ g i t commit . . . $ g i t checkout master . . . $ g i t commit . . . 82ea19 cd27e1 98173c ab716e master testHEAD 31
  • 40. Commit sur une branche Un commit va toujours se faire sur la branche courante . . . $ g i t commit . . . $ g i t checkout master . . . $ g i t commit . . . 82ea19 cd27e1 98173c ab716e 716ea4 master testHEAD 31
  • 41. Commit sur une branche Un commit va toujours se faire sur la branche courante . . . $ g i t commit . . . $ g i t checkout master . . . $ g i t commit . . . 82ea19 cd27e1 98173c ab716e 716ea4 master test HEAD 31
  • 42. Commit sur une branche Un commit va toujours se faire sur la branche courante . . . $ g i t commit . . . $ g i t checkout master . . . $ g i t commit . . . 82ea19 cd27e1 98173c 62eac3 ab716e 716ea4 test masterHEAD 31
  • 43. Opérations de base sur une branche On peut supprimer une branche avec l’option -d $ g i t branch −d t e s t Deleted branch t e s t ( was 617 a041 ) . On peut renommer une branche avec l’option -m $ g i t branch ∗ master t e s t $ g i t branch −m t e s t a l t e r n a t i v e $ g i t branch a l t e r n a t i v e ∗ master 32
  • 44. Fusion de branches On peut fusionner deux branches pour en combiner les modifications La fusion se fait vers la branche courante On doit associer un message lors d’une fusion Une fusion est un commit qui agrège plusieurs modifications $ g i t merge t e s t Merge made by the ’ r e c u r s i v e ’ s t r a t e g y . ABOUT | 1 + AUTHORS | 1 + 2 f i l e s changed , 2 i n s e r t i o n s (+) c r e a t e mode 100644 ABOUT c r e a t e mode 100644 AUTHORS 33
  • 45. Fusion de branches La branche courante ne change pas après une fusion La branche fusionnée continue d’exister 82ea19 cd27e1 98173c 62eac3 ab716e 716ea4 886ca5 master test HEAD 33
  • 46. Gestion de conflits I Conflit lorsque deux branches à fusionner contiennent des modifications sur le même fichier Hello World! Hello World! This is me! Hellow! master alt 34
  • 47. Gestion de conflits II Conflit détecté lors d’une demande de merge $ g i t merge a l t Auto−merging f i l e . t x t CONFLICT ( content ) : Merge c o n f l i c t i n f i l e . t x t Automatic merge f a i l e d ; f i x c o n f l i c t s and then commit the r e s u l t . $ g i t s t a t u s # On branch master # Unmerged paths : # ( use g i t add/rm f i l e . . . as a p p r o p r i a t e to # mark r e s o l u t i o n ) # # both modified : file.txt # 35
  • 48. Gestion de conflits III Résolution manuelle du conflit suivie d’un commit $ cat f i l e . t x t HEAD H e l l o World ! This i s me! ======= Hellow ! a l t 36
  • 49. Checkout interdit On ne peut pas changer de branche n’importe quand $ echo ’ H e l l o ! ’ me . t x t $ g i t add me . t x t $ g i t commit −m I n i t i a l commit $ g i t branch a l t $ echo ’ I am God ’ me . t x t $ g i t add me . t x t $ g i t commit −m God i s t h e r e $ g i t checkout a l t $ echo ’ I am d e v i l ’ me . t x t $ g i t add me . t x t $ g i t checkout master e r r o r : Your l o c a l changes to the f o l l o w i n g f i l e s would be o v e r w r i t t e n by checkout : me . t x t Please , commit your changes or stash them b e f o r e you can switch branches . Aborting 37
  • 50. Stash On peut vouloir changer de branche sans faire un commit Sauvegarde des changements non-commités dans une pile $ g i t stash Saved working d i r e c t o r y and index s t a t e WIP on a l t : 818 ded5 I n i t i a l commit HEAD i s now at 818 ded5 I n i t i a l commit $ g i t checkout master Switched to branch ’ master ’ $ g i t stash l i s t stash@ {0}: WIP on a l t : 818 ded5 I n i t i a l commit On récupère un élément sur la pile avec « git stash pop » 38
  • 51. Modifier le dernier commit Parfois on peut vouloir modifier le dernier commit On utilise l’option --amend de la commande commit $ g i t add . . . $ g i t commit --amend −m M o d i f i c a t i o n . . . 39
  • 52. Rebase Un rebase permet de modifier l’endroit où des commits sont basés 82ea19 cd27e1 98173c 62eac3 master ab716e 716ea4 testHEAD 40
  • 53. Rebase Un rebase permet de modifier l’endroit où des commits sont basés $ g i t checkout t e s t $ g i t rebase master 82ea19 cd27e1 98173c 62eac3 master ab716e 716ea4 testHEAD ab716e 716ea4 testHEAD 40
  • 54. Comment utiliser les branches ? Gérer différentes versions Je maintiens une version v1.0 et je veux développer une v1.1 Gérer des phases de développement J’ai un prototype, une beta, une version stable... Gérer et corriger un bug Une branche pour une tâche particulière bien définie Gérer la contribution d’un développeur spécifique 41
  • 56. Dépôt distant Un remote est une référence vers un dépôt distant Lors d’un clone, par défaut la référence est origin $ g i t clone h t t p s :// github . com/git/git . git $ g i t remote o r i g i n $ g i t branch −a ∗ master remotes / o r i g i n /HEAD − o r i g i n / master remotes / o r i g i n / maint remotes / o r i g i n / master remotes / o r i g i n / next remotes / o r i g i n /pu remotes / o r i g i n / todo 43
  • 57. Charger des commits Charger des commits depuis le dépôt distant vers le local git pull remote branch $ g i t fetch o r i g i n $ g i t merge o r i g i n / master 82ea19 cd27e1 98173c origin/master masterHEAD 44
  • 58. Charger des commits Charger des commits depuis le dépôt distant vers le local git pull remote branch $ g i t fetch o r i g i n $ g i t merge o r i g i n / master 82ea19 cd27e1 98173c ab716e 716ea4origin/master origin/master masterHEAD 44
  • 59. Charger des commits Charger des commits depuis le dépôt distant vers le local git pull remote branch $ g i t fetch o r i g i n $ g i t merge o r i g i n / master 82ea19 cd27e1 98173c ab716e 716ea4 origin/master masterHEAD masterHEAD 44
  • 60. Envoyer des commits Envoyer des commits depuis le dépôt local vers le distant git push remote branch $ g i t push o r i g i n master 82ea19 cd27e1 98173c ab716e 716ea4origin/master masterHEAD 45
  • 61. Envoyer des commits Envoyer des commits depuis le dépôt local vers le distant git push remote branch $ g i t push o r i g i n master 82ea19 cd27e1 98173c ab716e 716ea4origin/master origin/master masterHEAD 45
  • 63. Définir un tag Un tag est une étiquette lisible pour identifier un commit $ g i t tag −m Première v e r s i o n V1 .0 80 eac39 $ g i t tag V1 .0 On peut utiliser le tag à la place du hash SHA-1 du commit $ g i t show V1 .0 tag V1.0 Tagger : S é b a s t i e n Combéfis seb478@gmail . com Date : F r i Oct 10 15:53:12 2014 +0200 Première v e r s i o n commit 80eac39fb449e6c93cc614cb9fb2b12c36f907ce Author : S é b a s t i e n Combéfis seb478@gmail . com Date : Tue Oct 7 21:22:21 2014 +0200 Premier commit 47
  • 64. Historique des modifications d’un fichier La commande « git show » permet de voir un fichier dans un commit spécifié $ g i t show 80 eac39 : t e s t . t x t H e l l o World ! This i s to show how git show works ! La commande « git blame » donne des informations de modification sur un fichier $ g i t blame t e s t . t x t ^400 fda6 ( S é b a s t i e n Combéfis 2014−10−10 15:50:25 +0200 1) H e l l o 48
  • 65. Description d’un commit Lorsqu’on fait un commit, on spécifie son titre avec l’option -m $ g i t commit −m T i t r e du commit En ne précisant pas le -m, on a accès à l’éditeur avancé 49
  • 66. Nettoyer l’espace de travail Supprimer les modifications dans l’espace de travail $ g i t stash save --keep−index $ g i t stash drop Revenir juste après le dernier commit $ g i t r e s e t --hard HEAD Remet le pointeur de la branche courante sur HEAD Remet l’espace de travail et l’index comme sur HEAD 50
  • 67. Compresser le dépôt Git Au fur et à mesure des commits, le dépôt Git s’alourdit Git possède un ramasse-miettes (garbage collector) Nettoyage des fichiers plus nécessaires Optimisation de l’utilisation de l’espace disque Compression des fichiers de révision $ g i t gc 51
  • 68. Ignorer des fichiers Git peut ignorer des fichiers du répertoire de travail Le fichier .gitignore contient les fichiers à ignorer ∗. c l a s s # Mobile Tools f o r Java (J2ME) . mtj . tmp/ # Package F i l e s # ∗. j a r ∗. war ∗. ear # v i r t u a l machine crash logs , # see http ://www. j a v a . com/en/ download / help / e r r o r _ h o t s p o t . xml hs_err_pid ∗ 52
  • 69. Livres de référence ISBN 978-0-596-52012-0 ISBN 978-1-934-35615-9 53
  • 70. Ressources en ligne http://www.git-scm.com/ Site web officiel http://pcottle.github.io/learnGitBranching/ Apprendre Git et la gestion des branches de manière ludique https://github.com/github/gitignore Exemples de fichiers .gitignore 54