par la pratique
Qui suis-je ?

     Rossi Oddet
 Consultant IT chez SQLI
  Manager JCertif Lab

   Twitter : @rossioddet
Blog: http://blog.roddet.com


                               2
c’est quoi ?



  3
Un outil de gestion de version
      pour vos fichiers



              4
Oui pour votre code source aussi !



                5
Pourquoi Git ?



       6
Pour comprendre, un peu
       d’histoire


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




                8
Pendant longtemps, tout centralisé




                9
Le changement
c’est maintenant !


                     10
Gestion distribuée des sources



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


              12
Imaginez les performances sans
         accès réseau


              13
Votre serveur indisponible ?



             14
Commitez en local !



         15
Créer/Gérer vos branches en local



                16
Synchronisez ! quand votre serveur
          est disponible


                17
Votre serveur irrécupérable ?



              18
Pas grave vous avez TOUT en local



                19
Oui TOUT !



    20
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
TP 2 - A propos de vous


     Objectif : Paramétrage initial




                   22
git config --list
user.name=XXXX
user.email=XXXXX
core.excludesfile=/Users/rossi/.gitignore_global
difftool.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=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true



                                 23
Présentez-vous !

git config --global user.name “Rossi Oddet”
git config --global user.email rossi.oddet@jcertif.fr




                         24
git config --list
user.name=Rossi Oddet
user.email=rossi.oddet@jcertif.fr
core.excludesfile=/Users/rossi/.gitignore_global
difftool.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=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true



                                 25
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
Cycle de vie d’un fichier




           27
TP 4 - Versionnez votre projet


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




                                 28
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
Créer un fichier .gitignore
                                .gitignore
 Lister les fichiers/
répertoires à ne pas   target
     versionner




                                 30
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
git add .

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




                    32
git status




    33
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
git log

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




                          35
Modifier .gitignore
                                        .gitignore
  Exclusion des fichiers    target
pouvant être générés par   .project
                           .settings
         Eclipse           .classpath




                                         36
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
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
git log
commit 22180e6fe8effc72e05e173c313037be76dafdae
Author: Rossi Oddet <rossi.oddet@gmail.com>
Date: Wed Aug 22 22:28:27 2012 +0200

  Exclusion des fichiers Eclipse

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




                          39
git status


# On branch master
nothing to commit (working directory clean)




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




                                       merci @rblancho
                                                  41
TP 5 - Oops ! Je me suis trompé


Objectif : voir comment se sortir d’une manipulation malheureuse




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


                43
Modifier le fichier .gitignore
                                       .gitignore

                          target
                          .project
                          .settings
                          .classpath
Ajout du répertoire src   src




                                        44
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
git checkout .gitignore
                                       .gitignore

                          target
                          .project
                          .settings
                          .classpath
Retour à l’état initial




                                        46
git status


# On branch master
nothing to commit (working directory clean)




                    47
Cas 2 : le “add” de trop



           48
Modifier le fichier .gitignore
                                       .gitignore

                          target
                          .project
                          .settings
                          .classpath
Ajout du répertoire src   src




                                        49
git add .gitignore


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




                            50
git status

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

 modified: .gitignore
#




                     51
git reset HEAD .gitignore


       Unstaged changes after reset:
       M	

 .gitignore




                    52
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
Cas 3 : le commit de trop



            54
Modifier le fichier .gitignore
                                       .gitignore

                          target
                          .project
                          .settings
                          .classpath
Ajout du répertoire src   src




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

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




                            56
git log --pretty=oneline

59a620a8a78f6643b42df250ad02ffd903bf80e2 Exclusion du répertoire src
22180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse
9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet




                                        57
git reset --soft HEAD~1


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


                             58
git status


2180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse
9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet




                                             59
git revert HEAD


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


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


                61
git log --stat
                                 commit 22180e6fe8effc72e05e173c313037be76dafdae
                                 Author: Rossi Oddet <rossi.oddet@gmail.com>
                                 Date: Wed Aug 22 22:28:27 2012 +0200

                                   Exclusion des fichiers Eclipse

dernier 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
Créer un fichier help.txt
               help.txt


       hello




               63
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.txt
no changes added to commit (use "git add" and/or "git commit -a")




                                    64
git add help.txt
        git commit --amend

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




                           65
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
TP 6 - Gérer les branches


   Objectif : Créer/manipuler des branches




                     67
git branch develop


 Création d’une branche develop




               68
git branch

La liste des branches existantes

                                    develop
                                   * master




                                               Le symbole * pour la branche courante


                                          69
Créer un fichier texte1.txt
                  texte1.txt


        texte 1




                   70
git add texte1.txt
git commit -m “Commit texte1.txt
        branche master”
            1 file changed, 1 insertion(+)
           create mode 100644 texte1.txt




                        71
git log --pretty:oneline

f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master
7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse
9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet




                                        72
git checkout develop

     Abandon de la branche master
 Positionnement sur la branche develop




                  73
git branch

   * develop
     master




      74
git log --pretty:oneline


   7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse
   9bd8c8a990b56384619413ff8d898a809269b3a2 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


                                  75
git merge master

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




                 76
git log --pretty=oneline


   f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master
   7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse
   9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet




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


                                           77
TP 7 : Gérer les conflits entre les
            branches

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




                                78
Dans la branche develop modifier
       le fichier texte1.txt
                    texte1.txt


           texte develop




                       79
git commit -a -m “Texte1 develop”



                80
Dans la branche master modifier le
         fichier texte1.txt
                     texte1.txt


            texte master




                           81
git commit -a -m “Texte1 master”



               82
Objectif = Merge “develop” vers
           “master”


               83
git checkout master
 git merge develop

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




                        Oops !


                              84
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
Ouvrir le fichier texte1.txt
                                           texte1.txt
                                     <<<<<<< HEAD
                                     texte master
Pas de panique, les symboles         =======
utilisés sont des “standards”        texte develop
                                     >>>>>>>
                                     develop




                                86
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
git mergetool
merge tool candidates: tortoisemerge emerge vimdiff
Merging:
texte1.txt

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




                          88
Avec vimdiff




     89
Modifier le fichier texte1.txt

                  texte1.txt


         texte master develop




                     90
git add texte1.txt
git commit -m “Merge OK”

        [master 1eca022] Merge Ok




                   91
git log --pretty=oneline
1eca0225aebd35927c340214919597be173168c7 Merge Ok
3b40b1fcb2e4c1d5483818e06a0a4c5c6ae1eb97 Texte1 master
cbe96035ac64454ba53157e4d7fd57abfed60d88 Texte1 develop
f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master
7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse
9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet



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


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

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




                                 93
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
Modifier le fichier README.md

                         README.md

Modifier du texte   jcertif-webapp 2012
                   ==============

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




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

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




                         96
git log --pretty=oneline
5d3373c2106df3c782e1c2e5e8dc817f068dd4ac Modif README.md
a56a3e84c096a58df7f900e349f5e43d7ada5f1f Merge pull request #47 from roddet/develop
45f1374f7a31df3d38a2eebb0abb9e5aa1e985dc [SPEAKERS] Ajout de la possibilité d'utiliser les balises HTML pour les
bios.
2c098eb7d66de510a102b578fbd8d118d9da0ce2 [HOME] Modification du texte éditorial
ba3f7ae455f3b28d87ea3f9047c8d961a7a574e9 Merge pull request #46 from roddet/develop
153a72c6d2a07605c5833a835e5fc0b2efbd35fb [AGENDA] Suppression du libellé 'Salle' de l'entête des colonnes
pour éviter que de
8879d6e942b0a3f34b5104c70af61f39068bddeb Merge pull request #41 from roddet/develop
de3957d7833b8489c3eb039b862879ec55941e53 [AGENDA] Red color on mouse over




                                                       97
git remote -v

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




                             98
git remote add roddet https://
   github.com/roddet/jcertif-
           webapp.git
      Ajout d’un dépôt distant “roddet”




                     99
git remote

   origin
   roddet




      100
git push origin master

          Dépôt   Branche


          101
git pull



   102
TP 7 - Git & Eclipse


        Démo




         103
Merci !



   104

JCertif 2012 : Git par la pratique

  • 1.
  • 2.
    Qui suis-je ? Rossi Oddet Consultant IT chez SQLI Manager JCertif Lab Twitter : @rossioddet Blog: http://blog.roddet.com 2
  • 3.
  • 4.
    Un outil degestion de version pour vos fichiers 4
  • 5.
    Oui pour votrecode source aussi ! 5
  • 6.
  • 7.
    Pour comprendre, unpeu d’histoire 7
  • 8.
    Le début dela gestion de versions = tout en local 8
  • 9.
  • 10.
  • 11.
  • 12.
    => Plus besoindu serveur pour voir l’historique d’un fichier 12
  • 13.
    Imaginez les performancessans accès réseau 13
  • 14.
  • 15.
  • 16.
  • 17.
    Synchronisez ! quandvotre serveur est disponible 17
  • 18.
  • 19.
    Pas grave vousavez TOUT en local 19
  • 20.
  • 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.
    TP 2 -A propos de vous Objectif : Paramétrage initial 22
  • 23.
    git config --list user.name=XXXX user.email=XXXXX core.excludesfile=/Users/rossi/.gitignore_global difftool.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=true core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true 23
  • 24.
    Présentez-vous ! git config--global user.name “Rossi Oddet” git config --global user.email rossi.oddet@jcertif.fr 24
  • 25.
    git config --list user.name=RossiOddet user.email=rossi.oddet@jcertif.fr core.excludesfile=/Users/rossi/.gitignore_global difftool.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=true core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true 25
  • 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.
    Cycle de vied’un fichier 27
  • 28.
    TP 4 -Versionnez votre projet Cas d’utilisation : versionner les fichiers du projet jcertif-web 2012 28
  • 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.
    Créer un fichier.gitignore .gitignore Lister les fichiers/ répertoires à ne pas target versionner 30
  • 31.
    git status # Onbranch 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.
    git add . Ajoutde tous les fichiers à l’état “staged” => candidat au prochain commit 32
  • 33.
  • 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.
    git log 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 35
  • 36.
    Modifier .gitignore .gitignore Exclusion des fichiers target pouvant être générés par .project .settings Eclipse .classpath 36
  • 37.
    git status # Onbranch 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.
    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.
    git log commit 22180e6fe8effc72e05e173c313037be76dafdae Author:Rossi Oddet <rossi.oddet@gmail.com> Date: Wed Aug 22 22:28:27 2012 +0200 Exclusion des fichiers Eclipse 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 39
  • 40.
    git status # Onbranch master nothing to commit (working directory clean) 40
  • 41.
    Exemple de customisationgit log git 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.
    TP 5 -Oops ! Je me suis trompé Objectif : voir comment se sortir d’une manipulation malheureuse 42
  • 43.
    Cas 1 :Je n’aurai pas dû modifier ce fichier 43
  • 44.
    Modifier le fichier.gitignore .gitignore target .project .settings .classpath Ajout du répertoire src src 44
  • 45.
    git status # Onbranch 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.
    git checkout .gitignore .gitignore target .project .settings .classpath Retour à l’état initial 46
  • 47.
    git status # Onbranch master nothing to commit (working directory clean) 47
  • 48.
    Cas 2 :le “add” de trop 48
  • 49.
    Modifier le fichier.gitignore .gitignore target .project .settings .classpath Ajout du répertoire src src 49
  • 50.
    git add .gitignore Fichierà l’état “staged” => fera partie du prochain commit 50
  • 51.
    git status # Onbranch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: .gitignore # 51
  • 52.
    git reset HEAD.gitignore Unstaged changes after reset: M .gitignore 52
  • 53.
    git status # Onbranch 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.
    Cas 3 :le commit de trop 54
  • 55.
    Modifier le fichier.gitignore .gitignore target .project .settings .classpath Ajout du répertoire src src 55
  • 56.
    git commit -a-m “Exclusion du répertoire src” [master 59a620a] Exclusion du répertoire src 1 file changed, 1 insertion(+) 56
  • 57.
    git log --pretty=oneline 59a620a8a78f6643b42df250ad02ffd903bf80e2Exclusion du répertoire src 22180e6fe8effc72e05e173c313037be76dafdae Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet 57
  • 58.
    git reset --softHEAD~1 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 58
  • 59.
    git status 2180e6fe8effc72e05e173c313037be76dafdae Exclusiondes fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet 59
  • 60.
    git revert HEAD Créationd’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.
    Cas 4 :j’ai oublié d’ajouter un fichier dans mon dernier commit 61
  • 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 Eclipse dernier 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.
    Créer un fichierhelp.txt help.txt hello 63
  • 64.
    git status # Onbranch 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.txt no changes added to commit (use "git add" and/or "git commit -a") 64
  • 65.
    git add help.txt git commit --amend Possibilité d’adapter le commentaire du précédent commit 65
  • 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.
    TP 6 -Gérer les branches Objectif : Créer/manipuler des branches 67
  • 68.
    git branch develop Création d’une branche develop 68
  • 69.
    git branch La listedes branches existantes develop * master Le symbole * pour la branche courante 69
  • 70.
    Créer un fichiertexte1.txt texte1.txt texte 1 70
  • 71.
    git add texte1.txt gitcommit -m “Commit texte1.txt branche master” 1 file changed, 1 insertion(+) create mode 100644 texte1.txt 71
  • 72.
    git log --pretty:oneline f7d65f859a04e16284e34edf1ad599c2966034eaCommit texte1.txt branche master 7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet 72
  • 73.
    git checkout develop Abandon de la branche master Positionnement sur la branche develop 73
  • 74.
    git branch * develop master 74
  • 75.
    git log --pretty:oneline 7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 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 75
  • 76.
    git merge master Updating 7470d58..f7d65f8 Fast-forward texte1.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 texte1.txt 76
  • 77.
    git log --pretty=oneline f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master 7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet le fichier texte1.txt est désormais présent dans la branche develop 77
  • 78.
    TP 7 :Gérer les conflits entre les branches Objectif : faire des modifications différentes d’un même fichier sur plusieurs branches et reporter des modifications entre branches 78
  • 79.
    Dans la branchedevelop modifier le fichier texte1.txt texte1.txt texte develop 79
  • 80.
    git commit -a-m “Texte1 develop” 80
  • 81.
    Dans la branchemaster modifier le fichier texte1.txt texte1.txt texte master 81
  • 82.
    git commit -a-m “Texte1 master” 82
  • 83.
    Objectif = Merge“develop” vers “master” 83
  • 84.
    git checkout master git merge develop Auto-merging texte1.txt CONFLICT (content): Merge conflict in texte1.txt Automatic merge failed; fix conflicts and then commit the result. Oops ! 84
  • 85.
    git status # Onbranch 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.
    Ouvrir le fichiertexte1.txt texte1.txt <<<<<<< HEAD texte master Pas de panique, les symboles ======= utilisés sont des “standards” texte develop >>>>>>> develop 86
  • 87.
    Pour résoudre leconflit, plusieurs choix • Modifier le fichier à la main en veillant à supprimer les chaines de caractères “<<<<<<< HEAD”, “=======”, “>>>>>>> develop” • Utiliser un outil de merge 87
  • 88.
    git mergetool merge toolcandidates: tortoisemerge emerge vimdiff Merging: texte1.txt Normal merge conflict for 'texte1.txt': {local}: modified file {remote}: modified file Hit return to start merge resolution tool (vimdiff): 88
  • 89.
  • 90.
    Modifier le fichiertexte1.txt texte1.txt texte master develop 90
  • 91.
    git add texte1.txt gitcommit -m “Merge OK” [master 1eca022] Merge Ok 91
  • 92.
    git log --pretty=oneline 1eca0225aebd35927c340214919597be173168c7Merge Ok 3b40b1fcb2e4c1d5483818e06a0a4c5c6ae1eb97 Texte1 master cbe96035ac64454ba53157e4d7fd57abfed60d88 Texte1 develop f7d65f859a04e16284e34edf1ad599c2966034ea Commit texte1.txt branche master 7470d58dac24636f839250bbff934bac18e6f996 Exclusion des fichiers Eclipse 9bd8c8a990b56384619413ff8d898a809269b3a2 Ajout de toutes les ressources du projet L’historique du commit “Texte1 develop” est également récupéré sur la branche master 92
  • 93.
    TP 6 -Travailler avec des dépôts distants Objectif : Récupérer/Partager des modifications d’un dépôt Git distant 93
  • 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.
    Modifier le fichierREADME.md README.md Modifier du texte jcertif-webapp 2012 ============== Web Application : http://www.jcertif.com 95
  • 96.
    git commit -a-m “Modif README.md” [master 5d3373c] Modif README.md 1 file changed, 1 insertion(+), 1 deletion(-) 96
  • 97.
    git log --pretty=oneline 5d3373c2106df3c782e1c2e5e8dc817f068dd4acModif README.md a56a3e84c096a58df7f900e349f5e43d7ada5f1f Merge pull request #47 from roddet/develop 45f1374f7a31df3d38a2eebb0abb9e5aa1e985dc [SPEAKERS] Ajout de la possibilité d'utiliser les balises HTML pour les bios. 2c098eb7d66de510a102b578fbd8d118d9da0ce2 [HOME] Modification du texte éditorial ba3f7ae455f3b28d87ea3f9047c8d961a7a574e9 Merge pull request #46 from roddet/develop 153a72c6d2a07605c5833a835e5fc0b2efbd35fb [AGENDA] Suppression du libellé 'Salle' de l'entête des colonnes pour éviter que de 8879d6e942b0a3f34b5104c70af61f39068bddeb Merge pull request #41 from roddet/develop de3957d7833b8489c3eb039b862879ec55941e53 [AGENDA] Red color on mouse over 97
  • 98.
    git remote -v origingit://github.com/JCERTIFLab/jcertif-webapp.git (fetch) origin git://github.com/JCERTIFLab/jcertif-webapp.git (push) 98
  • 99.
    git remote addroddet https:// github.com/roddet/jcertif- webapp.git Ajout d’un dépôt distant “roddet” 99
  • 100.
    git remote origin roddet 100
  • 101.
    git push originmaster Dépôt Branche 101
  • 102.
  • 103.
    TP 7 -Git & Eclipse Démo 103
  • 104.