Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JCertif 2012 : Git par la pratique

1,662 views

Published on

Session pratique de découverte de Git durant JCertif 2012

Published in: Technology
  • Be the first to like this

JCertif 2012 : Git par la pratique

  1. 1. par la pratique
  2. 2. Qui suis-je ? Rossi Oddet Consultant IT chez SQLI Manager JCertif Lab Twitter : @rossioddetBlog: http://blog.roddet.com 2
  3. 3. c’est quoi ? 3
  4. 4. Un outil de gestion de version pour vos fichiers 4
  5. 5. Oui pour votre code source aussi ! 5
  6. 6. Pourquoi Git ? 6
  7. 7. Pour comprendre, un peu d’histoire 7
  8. 8. Le début de la gestion de versions = tout en local 8
  9. 9. Pendant longtemps, tout centralisé 9
  10. 10. Le changementc’est maintenant ! 10
  11. 11. Gestion distribuée des sources 11
  12. 12. => Plus besoin du serveur pour voir l’historique d’un fichier 12
  13. 13. Imaginez les performances sans accès réseau 13
  14. 14. Votre serveur indisponible ? 14
  15. 15. Commitez en local ! 15
  16. 16. Créer/Gérer vos branches en local 16
  17. 17. Synchronisez ! quand votre serveur est disponible 17
  18. 18. Votre serveur irrécupérable ? 18
  19. 19. Pas grave vous avez TOUT en local 19
  20. 20. Oui TOUT ! 20
  21. 21. TP 1 - Installer Git• 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 21
  22. 22. TP 2 - A propos de vous Objectif : Paramétrage initial 22
  23. 23. git config --listuser.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 23
  24. 24. Présentez-vous !git config --global user.name “Rossi Oddet”git config --global user.email rossi.oddet@jcertif.fr 24
  25. 25. git config --listuser.name=Rossi Oddetuser.email=rossi.oddet@jcertif.frcore.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 25
  26. 26. TP 3 - Initialiser un projet• Décompresser le fichier jcertif-web-2012.zip• Se positionner dans le répertoire jcertif-web-2012• git init 26
  27. 27. Cycle de vie d’un fichier 27
  28. 28. TP 4 - Versionnez votre projetCas d’utilisation : versionner les fichiers du projet jcertif-web 2012 28
  29. 29. git status # 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 29
  30. 30. Créer un fichier .gitignore .gitignore Lister les fichiers/répertoires à ne pas target versionner 30
  31. 31. git status# 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 31
  32. 32. git add .Ajout de tous les fichiers à l’état “staged” => candidat au prochain commit 32
  33. 33. git status 33
  34. 34. git commit -m “Ajout de toutes les ressources du projet” [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 ... 34
  35. 35. git logcommit 9bd8c8a990b56384619413ff8d898a809269b3a2Author: Rossi Oddet <rossi.oddet@gmail.com>Date: Wed Aug 22 22:20:35 2012 +0200 Ajout de toutes les ressources du projet 35
  36. 36. Modifier .gitignore .gitignore Exclusion des fichiers targetpouvant être générés par .project .settings Eclipse .classpath 36
  37. 37. git status# 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") 37
  38. 38. git commit -a -m “Exclusion des fichiers Eclipse” [master 22180e6] Exclusion des fichiers Eclipse 1 file changed, 3 insertions(+) attention, commit automatique des fichiers modifiés les nouveaux fichiers ne sont pas ajoutés au commit 38
  39. 39. git logcommit 22180e6fe8effc72e05e173c313037be76dafdaeAuthor: Rossi Oddet <rossi.oddet@gmail.com>Date: Wed Aug 22 22:28:27 2012 +0200 Exclusion des fichiers Eclipsecommit 9bd8c8a990b56384619413ff8d898a809269b3a2Author: Rossi Oddet <rossi.oddet@gmail.com>Date: Wed Aug 22 22:20:35 2012 +0200 Ajout de toutes les ressources du projet 39
  40. 40. git status# On branch masternothing to commit (working directory clean) 40
  41. 41. Exemple de customisation git loggit log --graph --pretty=format:%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset --abbrev-commit merci @rblancho 41
  42. 42. TP 5 - Oops ! Je me suis trompéObjectif : voir comment se sortir d’une manipulation malheureuse 42
  43. 43. Cas 1 : Je n’aurai pas dû modifier ce fichier 43
  44. 44. Modifier le fichier .gitignore .gitignore target .project .settings .classpathAjout du répertoire src src 44
  45. 45. git status# 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") 45
  46. 46. git checkout .gitignore .gitignore target .project .settings .classpathRetour à l’état initial 46
  47. 47. git status# On branch masternothing to commit (working directory clean) 47
  48. 48. Cas 2 : le “add” de trop 48
  49. 49. Modifier le fichier .gitignore .gitignore target .project .settings .classpathAjout du répertoire src src 49
  50. 50. git add .gitignoreFichier à l’état “staged” => fera partie du prochain commit 50
  51. 51. git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: .gitignore# 51
  52. 52. git reset HEAD .gitignore Unstaged changes after reset: M .gitignore 52
  53. 53. git status# 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") 53
  54. 54. Cas 3 : le commit de trop 54
  55. 55. Modifier le fichier .gitignore .gitignore target .project .settings .classpathAjout du répertoire src src 55
  56. 56. git commit -a -m “Exclusion du répertoire src” [master 59a620a] Exclusion du répertoire src 1 file changed, 1 insertion(+) 56
  57. 57. git log --pretty=oneline59a620a8a78f6643b42df250ad02ffd903bf80e2 Exclusion du répertoire src22180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet 57
  58. 58. git reset --soft HEAD~1Supprime 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 58
  59. 59. git status2180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet 59
  60. 60. git revert HEADCré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 60
  61. 61. Cas 4 : j’ai oublié d’ajouter unfichier dans mon dernier commit 61
  62. 62. git log --stat commit 22180e6fe8effc72e05e173c313037be76dafdae Author: Rossi Oddet <rossi.oddet@gmail.com> Date: Wed Aug 22 22:28:27 2012 +0200 Exclusion des fichiers Eclipsedernier commit = 1 fichier .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 9bd8c8a990b56384619413ff8d898a809269b3a2 Author: Rossi Oddet <rossi.oddet@gmail.com> Date: Wed Aug 22 22:20:35 2012 +0200 Ajout de toutes les ressources du projet .gitignore | 1+ .... 62
  63. 63. Créer un fichier help.txt help.txt hello 63
  64. 64. git status# 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") 64
  65. 65. git add help.txt git commit --amendPossibilité d’adapter le commentaire du précédent commit 65
  66. 66. git log --stat commit 7470d58dac24636f839250bbff934bac18e6f996 Author: Rossi Oddet <rossi.oddet@gmail.com> Date: Wed Aug 22 22:28:27 2012 +0200 Exclusion des fichiers Eclipse .gitignore | 3 +++dernier commit = 2 fichiers help.txt | 1 + 2 files changed, 4 insertions(+) commit 9bd8c8a990b56384619413ff8d898a809269b3a2 Author: Rossi Oddet <rossi.oddet@gmail.com> Date: Wed Aug 22 22:20:35 2012 +0200 Ajout de toutes les ressources du projet .gitignore | 1+ 66
  67. 67. TP 6 - Gérer les branches Objectif : Créer/manipuler des branches 67
  68. 68. git branch develop Création d’une branche develop 68
  69. 69. git branchLa liste des branches existantes develop * master Le symbole * pour la branche courante 69
  70. 70. Créer un fichier texte1.txt texte1.txt texte 1 70
  71. 71. git add texte1.txtgit commit -m “Commit texte1.txt branche master” 1 file changed, 1 insertion(+) create mode 100644 texte1.txt 71
  72. 72. git log --pretty:onelinef7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet 72
  73. 73. git checkout develop Abandon de la branche master Positionnement sur la branche develop 73
  74. 74. git branch * develop master 74
  75. 75. git log --pretty:oneline 7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projetLe fichier texte1.txt n’est pas présent et le commit fait précédemment est absent de la branche 75
  76. 76. git merge master Updating 7470d58..f7d65f8 Fast-forward texte1.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 texte1.txt 76
  77. 77. git log --pretty=oneline f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master 7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projetle fichier texte1.txt est désormais présent dans la branche develop 77
  78. 78. TP 7 : Gérer les conflits entre les branchesObjectif : faire des modifications différentes d’un même fichier surplusieurs branches et reporter des modifications entre branches 78
  79. 79. Dans la branche develop modifier le fichier texte1.txt texte1.txt texte develop 79
  80. 80. git commit -a -m “Texte1 develop” 80
  81. 81. Dans la branche master modifier le fichier texte1.txt texte1.txt texte master 81
  82. 82. git commit -a -m “Texte1 master” 82
  83. 83. Objectif = Merge “develop” vers “master” 83
  84. 84. git checkout master git merge developAuto-merging texte1.txtCONFLICT (content): Merge conflict in texte1.txtAutomatic merge failed; fix conflicts and then commit the result. Oops ! 84
  85. 85. git status# 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") 85
  86. 86. Ouvrir le fichier texte1.txt texte1.txt <<<<<<< HEAD texte masterPas de panique, les symboles =======utilisés sont des “standards” texte develop >>>>>>> develop 86
  87. 87. Pour résoudre le conflit, plusieurs choix• Modifier le fichier à la main en veillant à supprimer les chaines de caractères “<<<<<<< HEAD”, “=======”, “>>>>>>> develop”• Utiliser un outil de merge 87
  88. 88. git mergetoolmerge tool candidates: tortoisemerge emerge vimdiffMerging:texte1.txtNormal merge conflict for texte1.txt: {local}: modified file {remote}: modified fileHit return to start merge resolution tool (vimdiff): 88
  89. 89. Avec vimdiff 89
  90. 90. Modifier le fichier texte1.txt texte1.txt texte master develop 90
  91. 91. git add texte1.txtgit commit -m “Merge OK” [master 1eca022] Merge Ok 91
  92. 92. git log --pretty=oneline1eca0225aebd35927c340214919597be173168c7 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 92
  93. 93. TP 6 - Travailler avec des dépôts distantsObjectif : Récupérer/Partager des modifications d’un dépôt Git distant 93
  94. 94. git clone https://github.com/JCERTIFLab/jcertif-webapp.git 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. 94
  95. 95. Modifier le fichier README.md README.mdModifier du texte jcertif-webapp 2012 ============== Web Application : http://www.jcertif.com 95
  96. 96. git commit -a -m “Modif README.md” [master 5d3373c] Modif README.md 1 file changed, 1 insertion(+), 1 deletion(-) 96
  97. 97. git log --pretty=oneline5d3373c2106df3c782e1c2e5e8dc817f068dd4ac Modif README.mda56a3e84c096a58df7f900e349f5e43d7ada5f1f Merge pull request #47 from roddet/develop45f1374f7a31df3d38a2eebb0abb9e5aa1e985dc [SPEAKERS] Ajout de la possibilité dutiliser les balises HTML pour lesbios.2c098eb7d66de510a102b578fbd8d118d9da0ce2 [HOME] Modification du texte éditorialba3f7ae455f3b28d87ea3f9047c8d961a7a574e9 Merge pull request #46 from roddet/develop153a72c6d2a07605c5833a835e5fc0b2efbd35fb [AGENDA] Suppression du libellé Salle de lentête des colonnespour éviter que de8879d6e942b0a3f34b5104c70af61f39068bddeb Merge pull request #41 from roddet/developde3957d7833b8489c3eb039b862879ec55941e53 [AGENDA] Red color on mouse over 97
  98. 98. git remote -vorigin git://github.com/JCERTIFLab/jcertif-webapp.git (fetch)origin git://github.com/JCERTIFLab/jcertif-webapp.git (push) 98
  99. 99. git remote add roddet https:// github.com/roddet/jcertif- webapp.git Ajout d’un dépôt distant “roddet” 99
  100. 100. git remote origin roddet 100
  101. 101. git push origin master Dépôt Branche 101
  102. 102. git pull 102
  103. 103. TP 7 - Git & Eclipse Démo 103
  104. 104. Merci ! 104

×