104
par la pratique

JCertif 2012 : Git par la pratique

Embed Size (px)

DESCRIPTION

Session pratique de découverte de Git durant JCertif 2012

Citation preview

Page 1: JCertif 2012 : Git par la pratique

par la pratique

Page 2: JCertif 2012 : Git par la pratique

2

Qui suis-je ?

Rossi OddetConsultant IT chez SQLI

Manager JCertif Lab

Twitter : @rossioddetBlog: http://blog.roddet.com

2

Page 3: JCertif 2012 : Git par la pratique

3

c’est quoi ?

Page 4: JCertif 2012 : Git par la pratique

Un outil de gestion de version pour vos fichiers

4

Page 5: JCertif 2012 : Git par la pratique

Oui pour votre code source aussi !

5

Page 6: JCertif 2012 : Git par la pratique

Pourquoi Git ?

6

Page 7: JCertif 2012 : Git par la pratique

Pour comprendre, un peu d’histoire

7

Page 8: JCertif 2012 : Git par la pratique

Le début de la gestion de versions = tout en local

8

Page 9: JCertif 2012 : Git par la pratique

Pendant longtemps, tout centralisé

9

Page 10: JCertif 2012 : Git par la pratique

Le changement c’est maintenant !

10

Page 11: JCertif 2012 : Git par la pratique

Gestion distribuée des sources

11

Page 12: JCertif 2012 : Git par la pratique

=> Plus besoin du serveur pour voir l’historique d’un fichier

12

Page 13: JCertif 2012 : Git par la pratique

Imaginez les performances sans accès réseau

13

Page 14: JCertif 2012 : Git par la pratique

Votre serveur indisponible ?

14

Page 15: JCertif 2012 : Git par la pratique

Commitez en local !

15

Page 16: JCertif 2012 : Git par la pratique

Créer/Gérer vos branches en local

16

Page 17: JCertif 2012 : Git par la pratique

Synchronisez ! quand votre serveur est disponible

17

Page 18: JCertif 2012 : Git par la pratique

Votre serveur irrécupérable ?

18

Page 19: JCertif 2012 : Git par la pratique

Pas grave vous avez TOUT en local

19

Page 20: JCertif 2012 : Git par la pratique

Oui TOUT !

20

Page 21: JCertif 2012 : Git par la pratique

TP 1 - Installer Git

21

• Rendez-vous à la page de téléchargement : http://git-scm.com/download

• Suivez les instructions suivant votre plateforme (Windows, Linux, Mac)

• Vérification de l’installation : git --version

Page 22: JCertif 2012 : Git par la pratique

TP 2 - A propos de vous

22

Objectif : Paramétrage initial

Page 23: JCertif 2012 : Git par la pratique

git config --list

23

user.name=XXXXuser.email=XXXXXcore.excludesfile=/Users/rossi/.gitignore_globaldifftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"difftool.sourcetree.path=mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"mergetool.sourcetree.trustexitcode=truecore.repositoryformatversion=0core.filemode=truecore.bare=falsecore.logallrefupdates=truecore.ignorecase=true

Page 24: JCertif 2012 : Git par la pratique

Présentez-vous !

24

git config --global user.name “Rossi Oddet”git config --global user.email [email protected]

Page 25: JCertif 2012 : Git par la pratique

git config --list

25

user.name=Rossi [email protected]=/Users/rossi/.gitignore_globaldifftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"difftool.sourcetree.path=mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"mergetool.sourcetree.trustexitcode=truecore.repositoryformatversion=0core.filemode=truecore.bare=falsecore.logallrefupdates=truecore.ignorecase=true

Page 26: JCertif 2012 : Git par la pratique

TP 3 - Initialiser un projet

26

• Décompresser le fichier jcertif-web-2012.zip

• Se positionner dans le répertoire jcertif-web-2012

• git init

Page 27: JCertif 2012 : Git par la pratique

Cycle de vie d’un fichier

27

Page 28: JCertif 2012 : Git par la pratique

TP 4 - Versionnez votre projet

28

Cas d’utilisation : versionner les fichiers du projet jcertif-web 2012

Page 29: JCertif 2012 : Git par la pratique

git status

29

# On branch master## Initial commit## Untracked files:# (use "git add <file>..." to include in what will be committed)## README.md# pom.xml# src/# target/

Le répertoire “target” est un répertoire généré par Maven, nous ne souhaitons pas le versionner

Page 30: JCertif 2012 : Git par la pratique

Créer un fichier .gitignore

30

target

.gitignoreLister les fichiers/

répertoires à ne pas versionner

Page 31: JCertif 2012 : Git par la pratique

git status

31

# On branch master## Initial commit## Untracked files:# (use "git add <file>..." to include in what will be committed)## .gitignore# README.md# pom.xml# src/

Le répertoire “target” n’apparait plus

Page 32: JCertif 2012 : Git par la pratique

git add .

32

Ajout de tous les fichiers à l’état “staged”=> candidat au prochain commit

Page 33: JCertif 2012 : Git par la pratique

git status

33

Page 34: JCertif 2012 : Git par la pratique

git commit -m “Ajout de toutes les ressources du projet”

34

[master (root-commit) 9bd8c8a] Ajout de toutes les ressources du projet 118 files changed, 7431 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/jcertif/web/ihm/LocaleBean.java create mode 100644 src/main/java/com/jcertif/web/ihm/calendar/AgendaBean.java create mode 100644 src/main/java/com/jcertif/web/ihm/calendar/AgendaEvent.java create mode 100644 src/main/java/com/jcertif/web/ihm/calendar/AgendaLine.java create mode 100644 src/main/java/com/jcertif/web/ihm/connect/LoginBean.java create mode 100644 src/main/java/com/jcertif/web/ihm/connect/LogoutBean.java create mode 100644 src/main/java/com/jcertif/web/ihm/contact/ContactBean.java

...

Page 35: JCertif 2012 : Git par la pratique

git log

35

commit 9bd8c8a990b56384619413ff8d898a809269b3a2Author: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:20:35 2012 +0200

Ajout de toutes les ressources du projet

Page 36: JCertif 2012 : Git par la pratique

Modifier .gitignore

36

target.project.settings.classpath

.gitignoreExclusion des fichiers

pouvant être générés par Eclipse

Page 37: JCertif 2012 : Git par la pratique

git status

37

# On branch master# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: .gitignore#no changes added to commit (use "git add" and/or "git commit -a")

Page 38: JCertif 2012 : Git par la pratique

git commit -a -m “Exclusion des fichiers Eclipse”

38

[master 22180e6] Exclusion des fichiers Eclipse 1 file changed, 3 insertions(+)

attention, commit automatique des fichiers modifiésles nouveaux fichiers ne sont pas ajoutés au commit

Page 39: JCertif 2012 : Git par la pratique

git log

39

commit 22180e6fe8effc72e05e173c313037be76dafdaeAuthor: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:28:27 2012 +0200

Exclusion des fichiers Eclipse

commit 9bd8c8a990b56384619413ff8d898a809269b3a2Author: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:20:35 2012 +0200

Ajout de toutes les ressources du projet

Page 40: JCertif 2012 : Git par la pratique

git status

40

# On branch masternothing to commit (working directory clean)

Page 41: JCertif 2012 : Git par la pratique

Exemple de customisation git log

41

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

merci @rblancho

Page 42: JCertif 2012 : Git par la pratique

TP 5 - Oops ! Je me suis trompé

42

Objectif : voir comment se sortir d’une manipulation malheureuse

Page 43: JCertif 2012 : Git par la pratique

Cas 1 : Je n’aurai pas dû modifier ce fichier

43

Page 44: JCertif 2012 : Git par la pratique

Modifier le fichier .gitignore

44

target.project.settings.classpathsrc

.gitignore

Ajout du répertoire src

Page 45: JCertif 2012 : Git par la pratique

git status

45

# On branch master# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: .gitignore#no changes added to commit (use "git add" and/or "git commit -a")

Page 46: JCertif 2012 : Git par la pratique

git checkout .gitignore

46

target.project.settings.classpath

.gitignore

Retour à l’état initial

Page 47: JCertif 2012 : Git par la pratique

git status

47

# On branch masternothing to commit (working directory clean)

Page 48: JCertif 2012 : Git par la pratique

Cas 2 : le “add” de trop

48

Page 49: JCertif 2012 : Git par la pratique

Modifier le fichier .gitignore

49

target.project.settings.classpathsrc

.gitignore

Ajout du répertoire src

Page 50: JCertif 2012 : Git par la pratique

git add .gitignore

50

Fichier à l’état “staged” => fera partie du prochain commit

Page 51: JCertif 2012 : Git par la pratique

git status

51

# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: .gitignore#

Page 52: JCertif 2012 : Git par la pratique

git reset HEAD .gitignore

52

Unstaged changes after reset:M .gitignore

Page 53: JCertif 2012 : Git par la pratique

git status

53

# On branch master# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: .gitignore#no changes added to commit (use "git add" and/or "git commit -a")

Page 54: JCertif 2012 : Git par la pratique

Cas 3 : le commit de trop

54

Page 55: JCertif 2012 : Git par la pratique

Modifier le fichier .gitignore

55

target.project.settings.classpathsrc

.gitignore

Ajout du répertoire src

Page 56: JCertif 2012 : Git par la pratique

git commit -a -m “Exclusion du répertoire src”

56

[master 59a620a] Exclusion du répertoire src 1 file changed, 1 insertion(+)

Page 57: JCertif 2012 : Git par la pratique

git log --pretty=oneline

57

59a620a8a78f6643b42df250ad02ffd903bf80e2 Exclusion du répertoire src22180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet

Page 58: JCertif 2012 : Git par la pratique

git reset --soft HEAD~1

58

Supprime le dernier commit, le fichier passe à l’état “staged”

Seulement si le commit n’a pas été partagé avec un autre dépôt Git

Page 59: JCertif 2012 : Git par la pratique

git status

59

2180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet

Page 60: JCertif 2012 : Git par la pratique

git revert HEAD

60

Création d’un nouveau commit annulant l’effet du dernier commit

Pratique lorsque le commit a été partagé avec un autre dépôt Git

Page 61: JCertif 2012 : Git par la pratique

Cas 4 : j’ai oublié d’ajouter un fichier dans mon dernier commit

61

Page 62: JCertif 2012 : Git par la pratique

git log --stat

62

commit 22180e6fe8effc72e05e173c313037be76dafdaeAuthor: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:28:27 2012 +0200

Exclusion des fichiers Eclipse

.gitignore | 3 +++ 1 file changed, 3 insertions(+)

commit 9bd8c8a990b56384619413ff8d898a809269b3a2Author: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:20:35 2012 +0200

Ajout de toutes les ressources du projet

.gitignore | 1 +....

dernier commit = 1 fichier

Page 63: JCertif 2012 : Git par la pratique

Créer un fichier help.txt

63

hello

help.txt

Page 64: JCertif 2012 : Git par la pratique

git status

64

# On branch master# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: .gitignore## Untracked files:# (use "git add <file>..." to include in what will be committed)## help.txtno changes added to commit (use "git add" and/or "git commit -a")

Page 65: JCertif 2012 : Git par la pratique

git add help.txtgit commit --amend

65

Possibilité d’adapter le commentaire du précédent commit

Page 66: JCertif 2012 : Git par la pratique

git log --stat

66

commit 7470d58dac24636f839250bbff934bac18e6f996Author: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:28:27 2012 +0200

Exclusion des fichiers Eclipse

.gitignore | 3 +++ help.txt | 1 + 2 files changed, 4 insertions(+)

commit 9bd8c8a990b56384619413ff8d898a809269b3a2Author: Rossi Oddet <[email protected]>Date: Wed Aug 22 22:20:35 2012 +0200

Ajout de toutes les ressources du projet

.gitignore | 1 +

dernier commit = 2 fichiers

Page 67: JCertif 2012 : Git par la pratique

TP 6 - Gérer les branches

67

Objectif : Créer/manipuler des branches

Page 68: JCertif 2012 : Git par la pratique

git branch develop

68

Création d’une branche develop

Page 69: JCertif 2012 : Git par la pratique

git branch

69

develop* master

La liste des branches existantes

Le symbole * pour la branche courante

Page 70: JCertif 2012 : Git par la pratique

Créer un fichier texte1.txt

70

texte 1

texte1.txt

Page 71: JCertif 2012 : Git par la pratique

git add texte1.txtgit commit -m “Commit texte1.txt

branche master”

71

1 file changed, 1 insertion(+) create mode 100644 texte1.txt

Page 72: JCertif 2012 : Git par la pratique

git log --pretty:oneline

72

f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet

Page 73: JCertif 2012 : Git par la pratique

git checkout develop

73

Abandon de la branche masterPositionnement sur la branche develop

Page 74: JCertif 2012 : Git par la pratique

git branch

74

* develop master

Page 75: JCertif 2012 : Git par la pratique

git log --pretty:oneline

75

7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet

Le fichier texte1.txt n’est pas présent et le commit fait précédemment est absent de la branche

Page 76: JCertif 2012 : Git par la pratique

git merge master

76

Updating 7470d58..f7d65f8Fast-forward texte1.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 texte1.txt

Page 77: JCertif 2012 : Git par la pratique

git log --pretty=oneline

77

f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet

le fichier texte1.txt est désormais présent dans la branche develop

Page 78: JCertif 2012 : Git par la pratique

TP 7 : Gérer les conflits entre les branches

78

Objectif : faire des modifications différentes d’un même fichier sur plusieurs branches et reporter des modifications entre branches

Page 79: JCertif 2012 : Git par la pratique

Dans la branche develop modifier le fichier texte1.txt

79

texte develop

texte1.txt

Page 80: JCertif 2012 : Git par la pratique

git commit -a -m “Texte1 develop”

80

Page 81: JCertif 2012 : Git par la pratique

Dans la branche master modifier le fichier texte1.txt

81

texte master

texte1.txt

Page 82: JCertif 2012 : Git par la pratique

git commit -a -m “Texte1 master”

82

Page 83: JCertif 2012 : Git par la pratique

Objectif = Merge “develop” vers “master”

83

Page 84: JCertif 2012 : Git par la pratique

git checkout mastergit merge develop

84

Auto-merging texte1.txtCONFLICT (content): Merge conflict in texte1.txtAutomatic merge failed; fix conflicts and then commit the result.

Oops !

Page 85: JCertif 2012 : Git par la pratique

git status

85

# On branch master# Unmerged paths:# (use "git add/rm <file>..." as appropriate to mark resolution)## both modified: texte1.txt#no changes added to commit (use "git add" and/or "git commit -a")

Page 86: JCertif 2012 : Git par la pratique

Ouvrir le fichier texte1.txt

86

<<<<<<< HEADtexte master=======texte develop>>>>>>> develop

texte1.txt

Pas de panique, les symboles utilisés sont des “standards”

Page 87: JCertif 2012 : Git par la pratique

Pour résoudre le conflit, plusieurs choix

87

• Modifier le fichier à la main en veillant à supprimer les chaines de caractères “<<<<<<< HEAD”, “=======”, “>>>>>>> develop”

• Utiliser un outil de merge

Page 88: JCertif 2012 : Git par la pratique

git mergetool

88

merge tool candidates: tortoisemerge emerge vimdiffMerging:texte1.txt

Normal merge conflict for 'texte1.txt': {local}: modified file {remote}: modified fileHit return to start merge resolution tool (vimdiff):

Page 89: JCertif 2012 : Git par la pratique

Avec vimdiff

89

Page 90: JCertif 2012 : Git par la pratique

Modifier le fichier texte1.txt

90

texte master develop

texte1.txt

Page 91: JCertif 2012 : Git par la pratique

git add texte1.txtgit commit -m “Merge OK”

91

[master 1eca022] Merge Ok

Page 92: JCertif 2012 : Git par la pratique

git log --pretty=oneline

92

1eca0225aebd35927c340214919597be173168c7 Merge Ok3b40b1fcb2e4c1d5483818e06a0a4c5c6ae1eb97 Texte1 mastercbe96035ac64454ba53157e4d7fd57abfed60d88 Texte1 developf7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet

L’historique du commit “Texte1 develop” est également récupéré sur la branche master

Page 93: JCertif 2012 : Git par la pratique

TP 6 - Travailler avec des dépôts distants

93

Objectif : Récupérer/Partager des modifications d’un dépôt Git distant

Page 94: JCertif 2012 : Git par la pratique

git clone https://github.com/JCERTIFLab/jcertif-webapp.git

94

Cloning into 'jcertif-webapp'...remote: Counting objects: 2201, done.remote: Compressing objects: 100% (938/938), done.remote: Total 2201 (delta 906), reused 2129 (delta 835)Receiving objects: 100% (2201/2201), 85.21 MiB | 1.07 MiB/s, done.Resolving deltas: 100% (906/906), done.

Page 95: JCertif 2012 : Git par la pratique

Modifier le fichier README.md

95

jcertif-webapp 2012==============

Web Application : http://www.jcertif.com

README.md

Modifier du texte

Page 96: JCertif 2012 : Git par la pratique

git commit -a -m “Modif README.md”

96

[master 5d3373c] Modif README.md 1 file changed, 1 insertion(+), 1 deletion(-)

Page 97: JCertif 2012 : Git par la pratique

git log --pretty=oneline

97

5d3373c2106df3c782e1c2e5e8dc817f068dd4ac Modif README.mda56a3e84c096a58df7f900e349f5e43d7ada5f1f Merge pull request #47 from roddet/develop45f1374f7a31df3d38a2eebb0abb9e5aa1e985dc [SPEAKERS] Ajout de la possibilité d'utiliser les balises HTML pour les bios.2c098eb7d66de510a102b578fbd8d118d9da0ce2 [HOME] Modification du texte éditorialba3f7ae455f3b28d87ea3f9047c8d961a7a574e9 Merge pull request #46 from roddet/develop153a72c6d2a07605c5833a835e5fc0b2efbd35fb [AGENDA] Suppression du libellé 'Salle' de l'entête des colonnes pour éviter que de8879d6e942b0a3f34b5104c70af61f39068bddeb Merge pull request #41 from roddet/developde3957d7833b8489c3eb039b862879ec55941e53 [AGENDA] Red color on mouse over

Page 98: JCertif 2012 : Git par la pratique

git remote -v

98

origin git://github.com/JCERTIFLab/jcertif-webapp.git (fetch)origin git://github.com/JCERTIFLab/jcertif-webapp.git (push)

Page 100: JCertif 2012 : Git par la pratique

git remote

100

originroddet

Page 101: JCertif 2012 : Git par la pratique

git push origin master

101

Dépôt Branche

Page 102: JCertif 2012 : Git par la pratique

git pull

102

Page 103: JCertif 2012 : Git par la pratique

TP 7 - Git & Eclipse

103

Démo

Page 104: JCertif 2012 : Git par la pratique

Merci !

104