SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Open-REX - Git




 8 juillet 2010
 Antoine Büsch
Licence

• Cette présentation vous est fournie sous licence Creative Commons
  Attribution Share Alike


• Vous êtes libres :
   – De reproduire, distribuer et communiquer cette création au public
• Selon les conditions suivantes :
   – Paternité. Vous devez citer le nom des auteurs originaux mais pas d'une
      manière qui suggèrerait qu'ils vous soutiennent ou approuvent votre
      utilisation de l'œuvre.
   – A chaque réutilisation ou distribution de cette création, vous devez faire
      apparaître clairement au public les conditions contractuelles de sa mise à
      disposition sous licence identique Creative Commons Share Alike.
   – Chacune de ces conditions peut être levée si vous obtenez l'autorisation
      du titulaire des droits sur cette œuvre.
   – Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur
      ou des auteurs.
Sommaire

•   Introduction
•   Concepts
•   Workflows
•   Outils
Présentation

• D'après le Merriam-Webster :
   – a foolish or worthless person
• C'est aussi un gestionnaire de versions :
   – distribué
   – open-source
   – rapide
• Même catégorie que Bazaar, Mercurial, Monotone,
  BitKeeper...
Historique

• Créé en avril 2005 par Linus Torvalds pour le
  développement du noyau Linux :
   – avant 2002 :    patches and tarballs
   – 2002 à 2005 :   utilisation de BitKeeper (propriétaire)
   – avril 2005 :    license de BitKeeper révoquée
Historique

• Démarrage du projet Git pour remplacer BitKeeper :

   –   3 avril 2005      début du projet
   –   6 avril 2005      annonce du projet
   –   7 avril 2005      Git est ”self-hosting”
   –   16 juin 2005      première release du noyau (2.6.12) faite avec Git
   –   26 juillet 2005   Junio Hamano devient mainteneur du projet
   –   21 déc. 2005      sortie de la version 1.0
Caractéristiques

• Principales caractéristiques de Git :
   –   Supporte les historiques non-linéaires
   –   Supporte les développements distribués
   –   Compatibilité avec les protocoles existants
   –   Support efficace des gros projets
   –   Intégrité de l’historique assurée cryptographiquement
   –   Architecture modulaire
   –   Archive des snapshots de contenu, pas des fichiers
La Philosophie de Git
Faire l’inverse de CVS (ou SVN)
Concepts




Concepts
Dépôt (Repository)

• Git est un gestionnaire de version décentralisé
   – Chaque dépôt est techniquement égal aux autres
   – Chaque dépôt contient l'intégralité de l'historique du projet
       • On ne fait pas un checkout d'un projet, on fait un clone
   – La plupart des opérations se font en local, sans accès réseau
       • Commit
       • Branches/merges
       • Consultation de l'historique
   – Les dépôts peuvent communiquer entre eux et s'échanger des
     commits
Anatomie d'un dépôt Git

• Le répertoire .git
   – Uniquement à la racine du projet : ne pollue pas tous les
     répertoires
   – Un commit ou un update affecte tout le projet : pas de possibilité
     de mettre à jour un seul sous-répertoire
   – Contient la configuration Git du projet
   – Contient les références
   – Contient la base de donnée des commits
• Le répertoire de travail
   – Contient l'espace de travail : les fichiers de l'utilisateur dans une
     version donnée
Structures de données

• Git possède 3 structures de données principales :
   1. La base de donnée : contient le graphe des commits
   2. L'index : espace temporaire où sont préparés les commits
   3. L'espace de travail : l'arbre des fichiers dans une version donnée


            BDD                   Index                Espace de
                                                         travail
                       Commit               add / rm




                                 checkout
Commits

• Git maintient un graphe orienté de commits.
• Chaque commit représente l’état du contenu des fichiers à
  un instant t
• Un commit est représenté par un code SHA-1, qui
  dépend :
    – du contenu de tous les fichiers
    – du message du commit
    – du SHA-1 du ou des commits parents

➔
    Git peut-être vu comme une grosse hashmap dont les
    valeurs sont le contenu de tous les fichiers, et les clés sont
    des codes SHA-1
Références

• Une référence est un simple pointeur vers un commit. Peut
  être :
   – un simple label (tag)
   – une référence de branche : pointe vers le commit le plus récent de
     la branche


• On distingue :
   – Les références locales : modifiables par l'utilisateur
   – Les références « remotes » : non modifiables directement par
     l'utilisateur
Références

• Il existe une référence particulière : HEAD
   – Pointe toujours vers la référence de la branche courante
   – Lorsqu'on commite, c'est la référence de branche pointée par
     HEAD qui avance



                    X     Y          feature1


  A     B     C     D     E      F          master        HEAD



             v1.0
Branches

• Créer une branche = créer une référence vers un commit
   – Extrement léger
   – Instantané
   – Facile de changer d'une branche à une autre
• Les branches sont faciles à merger
• Git encourage l'utilisation des branches
   – Une branche par feature / bug-fix / etc.
Merges

• Contrairement à CVS/SVN, l'historique dans Git n'est pas
  linéaire : les commits sont organisés en graphe orienté
   – Un commit normal a 1 parent
   – Un commit de merge a 2 parents ou plus
• Quand on merge 2 branches :
   – Git est capable de retrouver l'ancêtre commun, et sait donc quels
     commits considérer pour le merge,
   – Les commits des 2 branches font partie intégrante de l'historique
     du commit de merge.
   – Git ne tracke pas les fichiers en tant que tels : capable de détecter
     les renommage a posteriori
• Git garde donc beaucoup plus d'information d'historique
   – Au final : merges plus faciles, moins de conflits
Merge (exemple)

• git merge feature1


             X   Y         feature1


 A   B   C   D   E     F          master            HEAD



             X   Y            feature1


 A   B   C   D   E     F         M         master     HEAD
Concepts avancés




Concepts Avancés
Réécriture d'historique

• Git vous donne un dépôt à part entière, mais également
  les outils pour réécrire une partie de l'historique
   – Possibilité de revenir en arrière (Undo), pour éliminer les n derniers
     commits
   – Possibilité de corriger le dernier commit : oubli d'un fichier,
     commentaire incomplet...
   – Possibilité de faire un « rebase » d'une branche
• Attention : ces opérations sont puissantes mais
  potentiellement dangereuses
• À ne faire que sur des commits locaux : si
  des commits qui ont été partagés (via git
  push ou git pull) sont affectés, vous allez
  vous faire des ennemis...
Rebasing

• Rebasing : prend tous les commits d'une branche à partir
  d'un certain point, et réapplique les changements
  introduits, dans l'ordre, à un autre endroit
• Permet de garder une branche synchronisée avec le tronc,
  sans avoir à faire de merges successifs.
• Les commits de la branche après un rebase sont de
  nouveaux commits
• À ne faire que sur une branche locale !
Rebase (1)

• git rebase master feature1




             X   Y       feature1


 A   B   C   D   E   F          master   HEAD
Rebase (2)

• Après rebase : même état que si la branche feature1 avait
  été créée à partir du commit F




                  X    Y         X'     Y'     feature1


  A    B    C    D     E    F         master       HEAD
Workflows




Workflows
Workflows

• Git est un outil puissant, flexible, mais qui n'impose pas de
  workflow particulier : s'adapte à votre besoin
   –   Utilisation en solitaire
   –   Utilisation en environnement mixte (CVS/SVN)
   –   Utilisation de type centralisée
   –   Utilisation centralisée avec intégrateur
   –   Utilisation de type « dictateur / lieutenant »
Utilisation solitaire

• Parfaitement adapté pour des projets personnels
   – Création d'un dépôt instantanée
   – Pas besoin de serveur
   – Tous les avantages d'une gestion de version :
      • Retours en arrière
      • Branches
      • ...
Utilisation en environnement mixte

• Des passerelles existent entre Git et d'autres VCS (CVS,
  SVN...)
• Le premier « clone » récupère l'intégralité de l'historique :
  opération potentiellement lente
• Ensuite, possibilité de synchroniser dans les 2 sens entre
  Git et CVS ou SVN
• Avantages de Git pour son travail personnel (branches,
  rapidité, historique local, …)
• Passage par CVS ou SVN pour la collaboration
• Attention : CVS ou SVN imposent des limitations
   – Pas possible d'envoyer vers SVN des commits de merge
   – Utilisation fréquente du rebasing pour garder un historique plus
     linéaire
Utilisation centralisée

• Même si Git est un DVCS, il est possible de l'utiliser de
  manière centralisée
• Utilisation courante en entreprise


                            Dépôt
                           partagé




         Dev A              Dev B              Dev C
Utilisation centralisée
                            avec intégrateur

• Variante du workflow précédent : une seul personne est
  responsable de commiter sur le dépôt central




                                     Dépôt
           intégrateur
                                    partagé




        Dev A             Dev B               Dev C
Organisation par équipe

• Chaque équipe travaille indépendement
• Un intégrateur intègre les différentes fonctionnalités et
  commite sur le dépôt central

                                            Dépôt
                            Intégrateur
                                           partagé




                Team A                       Team B




            Dev 1   Dev 2                 Dev 3      Dev 4
Workflows

• Git s'adapte à presque n'importe quel workflow
• La principale difficulté de Git : trouver le bon workflow pour
  votre organisation !
Outils
Outils

• La ligne de commande !
   – Reste le plus puissant (pemet le rebasing interactif) et souvent le
     plus rapide
• Interfaces graphiques
   – Gitk : outil graphique fourni en standard. Basé sur des technos
     vieillissantes (Tcl/Tk)
   – GitX sous MacOs
   – gitg sous Gnome...
   – En mode texte : tig
   – TortoiseGit sous Windows
• Intégration IDE : facilite les opérations de base, mais
  souvent incomplet pour les opérations complexes
   – Eclipse : plugin Egit, basé sur Jgit
   – Netbeans : module nbgit, basé sur Jgit
   – IDEA : en standard dans v9
Outils

• Plugin maven
   – Implémentation du plugin SCM pour Git
• Serveurs de CI
   – Plugins pour Hudson, Bamboo...
• Interfaces web
   – Gitweb fourni en standard : affichage basique des
     commits/branches/tags
   – Gitorious : permet les créations de dépôts, les clones, les demande
     de merge, etc...
• Gitosis / Gitolite : gestion d'ACL
   – Permet de définir les permissions pour chaque utilisateur au
     niveau dépôt ou branche
Outils

• Gerrit : système de revue de code, initié par Google
   – Utilisé pour le developpement d'Android
   – Fonctionne comme un « faux » dépôt Git sur lequel on pousse des
     commits
   – Les utilisateurs peuvent alors revoir / commenter les patches
   – Lorsque le patch est approuvé, il est poussé vers le vrai dépôt
     central
Conclusion

• Essayez Git !
   – Pas si difficile que ça avec la bonne approche → ne pas se dire
     que ça marche comme SVN !
   – Ce n'est qu'un outil
• De plus en plus difficile à ignorer
   – Bien implanté dans le monde open-source (Noyau Linux, X.org,
     VLC, Gnome, Wine…)
   – Commence à être populaire dans le monde Java : projet Maven,
     projet Eclipse, Android, …
• Flexibilité, adapation à différents workflow
• Se prête bien aux méthodologies Agiles :
   – Plus de puissance dans les mains des developpeurs
   – Responsabilisation
Questions ?
Références

• http://git-scm.com/
   – Site officiel
• http://progit.org/book/
   – Très bon livre gratuit en ligne
• http://gitref.org/
   – Référence
• http://nvie.com/git-model
   – Excellent post expliquant un modèle de branches
• http://blog.javabien.net/2009/12/01/serverless-ci-with-git/
   – Exemple d'integration continue sans serveur
• http://www.kernel.org/pub/software/scm/git/docs/git-svn.html
   – Documentation de git-svn

Mais conteúdo relacionado

Mais procurados

Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHubThibault Vlacich
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséECAM Brussels Engineering School
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Celinio Fernandes
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsAlice Loeser
 
Git utilisation quotidienne
Git   utilisation quotidienneGit   utilisation quotidienne
Git utilisation quotidienneSylvain Witmeyer
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Celinio Fernandes
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & TechniquesRachid NID SAID
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéZenika
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Gitmsadouni
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryZenika
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuDéveloppement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuAhmed Archive
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 

Mais procurados (20)

Tutorial Git
Tutorial GitTutorial Git
Tutorial Git
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHub
 
Git développez autrement
Git développez autrementGit développez autrement
Git développez autrement
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
 
GitPourLaNulle
GitPourLaNulleGitPourLaNulle
GitPourLaNulle
 
Git utilisation quotidienne
Git   utilisation quotidienneGit   utilisation quotidienne
Git utilisation quotidienne
 
Tutoriel GIT
Tutoriel GITTutoriel GIT
Tutoriel GIT
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)
 
Git l'essentiel
Git l'essentielGit l'essentiel
Git l'essentiel
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery Avancé
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous Delivery
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuDéveloppement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 

Destaque

CDI par la pratique
CDI par la pratiqueCDI par la pratique
CDI par la pratiqueIppon
 
Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)Ippon
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesIppon
 
Stateful is beautiful
Stateful is beautifulStateful is beautiful
Stateful is beautifulIppon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Ippon
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursIppon
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
Offre 2015 numeriq_ippon
Offre 2015 numeriq_ipponOffre 2015 numeriq_ippon
Offre 2015 numeriq_ipponIppon
 
Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Ippon
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open SourceIppon
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Ippon
 
Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Ippon
 
Mule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponMule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponIppon
 
Scrum et forfait
Scrum et forfaitScrum et forfait
Scrum et forfaitIppon
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 
Judoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentationJudoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentationPhilippe Minart
 

Destaque (20)

CDI par la pratique
CDI par la pratiqueCDI par la pratique
CDI par la pratique
 
Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)Atelier TDD (Test Driven Development)
Atelier TDD (Test Driven Development)
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à Achilles
 
Stateful is beautiful
Stateful is beautifulStateful is beautiful
Stateful is beautiful
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Offre 2015 numeriq_ippon
Offre 2015 numeriq_ipponOffre 2015 numeriq_ippon
Offre 2015 numeriq_ippon
 
Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
 
Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014
 
Mule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponMule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec Ippon
 
Scrum et forfait
Scrum et forfaitScrum et forfait
Scrum et forfait
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Judoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentationJudoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentation
 

Semelhante a Présentation du retour d'expérience sur Git

Git vs SVN
Git vs SVNGit vs SVN
Git vs SVNneuros
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...akramalidrissi1
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdfbadrfathallah2
 
Eclipse DemoCamp 2011 @ Nantes: EGit
Eclipse DemoCamp 2011 @ Nantes: EGitEclipse DemoCamp 2011 @ Nantes: EGit
Eclipse DemoCamp 2011 @ Nantes: EGitpcdavid_
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfmouad55
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsFactoVia
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsAZUG FR
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaCédric Leblond
 
GitHub - Présentation
GitHub - PrésentationGitHub - Présentation
GitHub - PrésentationDavid RIEHL
 
Petit Déjeuner Git chez Makina Corpus
Petit Déjeuner Git chez Makina CorpusPetit Déjeuner Git chez Makina Corpus
Petit Déjeuner Git chez Makina Corpusleplatrem
 
Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014Paris Salesforce Developer Group
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Deployment of a multi-site platform
Deployment of a multi-site platformDeployment of a multi-site platform
Deployment of a multi-site platformKaliop-slide
 

Semelhante a Présentation du retour d'expérience sur Git (20)

Git vs SVN
Git vs SVNGit vs SVN
Git vs SVN
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdf
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Eclipse DemoCamp 2011 @ Nantes: EGit
Eclipse DemoCamp 2011 @ Nantes: EGitEclipse DemoCamp 2011 @ Nantes: EGit
Eclipse DemoCamp 2011 @ Nantes: EGit
 
GIT Fundamentals
GIT FundamentalsGIT Fundamentals
GIT Fundamentals
 
3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
 
Universitélang scala tools
Universitélang scala toolsUniversitélang scala tools
Universitélang scala tools
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds Java
 
SVN
SVN SVN
SVN
 
SVN to GitHUb
SVN to GitHUbSVN to GitHUb
SVN to GitHUb
 
GitHub - Présentation
GitHub - PrésentationGitHub - Présentation
GitHub - Présentation
 
Petit Déjeuner Git chez Makina Corpus
Petit Déjeuner Git chez Makina CorpusPetit Déjeuner Git chez Makina Corpus
Petit Déjeuner Git chez Makina Corpus
 
Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Deployment of a multi-site platform
Deployment of a multi-site platformDeployment of a multi-site platform
Deployment of a multi-site platform
 

Mais de Ippon

Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Ippon
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Ippon
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Ippon
 
Multi criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationMulti criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationIppon
 
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014Ippon
 
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàCassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàIppon
 

Mais de Ippon (6)

Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
 
Multi criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationMulti criteria queries on a cassandra application
Multi criteria queries on a cassandra application
 
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
 
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàCassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
 

Présentation du retour d'expérience sur Git

  • 1. Open-REX - Git 8 juillet 2010 Antoine Büsch
  • 2. Licence • Cette présentation vous est fournie sous licence Creative Commons Attribution Share Alike • Vous êtes libres : – De reproduire, distribuer et communiquer cette création au public • Selon les conditions suivantes : – Paternité. Vous devez citer le nom des auteurs originaux mais pas d'une manière qui suggèrerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre. – A chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition sous licence identique Creative Commons Share Alike. – Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre. – Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.
  • 3. Sommaire • Introduction • Concepts • Workflows • Outils
  • 4. Présentation • D'après le Merriam-Webster : – a foolish or worthless person • C'est aussi un gestionnaire de versions : – distribué – open-source – rapide • Même catégorie que Bazaar, Mercurial, Monotone, BitKeeper...
  • 5. Historique • Créé en avril 2005 par Linus Torvalds pour le développement du noyau Linux : – avant 2002 : patches and tarballs – 2002 à 2005 : utilisation de BitKeeper (propriétaire) – avril 2005 : license de BitKeeper révoquée
  • 6. Historique • Démarrage du projet Git pour remplacer BitKeeper : – 3 avril 2005 début du projet – 6 avril 2005 annonce du projet – 7 avril 2005 Git est ”self-hosting” – 16 juin 2005 première release du noyau (2.6.12) faite avec Git – 26 juillet 2005 Junio Hamano devient mainteneur du projet – 21 déc. 2005 sortie de la version 1.0
  • 7. Caractéristiques • Principales caractéristiques de Git : – Supporte les historiques non-linéaires – Supporte les développements distribués – Compatibilité avec les protocoles existants – Support efficace des gros projets – Intégrité de l’historique assurée cryptographiquement – Architecture modulaire – Archive des snapshots de contenu, pas des fichiers
  • 8. La Philosophie de Git Faire l’inverse de CVS (ou SVN)
  • 10. Dépôt (Repository) • Git est un gestionnaire de version décentralisé – Chaque dépôt est techniquement égal aux autres – Chaque dépôt contient l'intégralité de l'historique du projet • On ne fait pas un checkout d'un projet, on fait un clone – La plupart des opérations se font en local, sans accès réseau • Commit • Branches/merges • Consultation de l'historique – Les dépôts peuvent communiquer entre eux et s'échanger des commits
  • 11. Anatomie d'un dépôt Git • Le répertoire .git – Uniquement à la racine du projet : ne pollue pas tous les répertoires – Un commit ou un update affecte tout le projet : pas de possibilité de mettre à jour un seul sous-répertoire – Contient la configuration Git du projet – Contient les références – Contient la base de donnée des commits • Le répertoire de travail – Contient l'espace de travail : les fichiers de l'utilisateur dans une version donnée
  • 12. Structures de données • Git possède 3 structures de données principales : 1. La base de donnée : contient le graphe des commits 2. L'index : espace temporaire où sont préparés les commits 3. L'espace de travail : l'arbre des fichiers dans une version donnée BDD Index Espace de travail Commit add / rm checkout
  • 13. Commits • Git maintient un graphe orienté de commits. • Chaque commit représente l’état du contenu des fichiers à un instant t • Un commit est représenté par un code SHA-1, qui dépend : – du contenu de tous les fichiers – du message du commit – du SHA-1 du ou des commits parents ➔ Git peut-être vu comme une grosse hashmap dont les valeurs sont le contenu de tous les fichiers, et les clés sont des codes SHA-1
  • 14. Références • Une référence est un simple pointeur vers un commit. Peut être : – un simple label (tag) – une référence de branche : pointe vers le commit le plus récent de la branche • On distingue : – Les références locales : modifiables par l'utilisateur – Les références « remotes » : non modifiables directement par l'utilisateur
  • 15. Références • Il existe une référence particulière : HEAD – Pointe toujours vers la référence de la branche courante – Lorsqu'on commite, c'est la référence de branche pointée par HEAD qui avance X Y feature1 A B C D E F master HEAD v1.0
  • 16. Branches • Créer une branche = créer une référence vers un commit – Extrement léger – Instantané – Facile de changer d'une branche à une autre • Les branches sont faciles à merger • Git encourage l'utilisation des branches – Une branche par feature / bug-fix / etc.
  • 17. Merges • Contrairement à CVS/SVN, l'historique dans Git n'est pas linéaire : les commits sont organisés en graphe orienté – Un commit normal a 1 parent – Un commit de merge a 2 parents ou plus • Quand on merge 2 branches : – Git est capable de retrouver l'ancêtre commun, et sait donc quels commits considérer pour le merge, – Les commits des 2 branches font partie intégrante de l'historique du commit de merge. – Git ne tracke pas les fichiers en tant que tels : capable de détecter les renommage a posteriori • Git garde donc beaucoup plus d'information d'historique – Au final : merges plus faciles, moins de conflits
  • 18. Merge (exemple) • git merge feature1 X Y feature1 A B C D E F master HEAD X Y feature1 A B C D E F M master HEAD
  • 20. Réécriture d'historique • Git vous donne un dépôt à part entière, mais également les outils pour réécrire une partie de l'historique – Possibilité de revenir en arrière (Undo), pour éliminer les n derniers commits – Possibilité de corriger le dernier commit : oubli d'un fichier, commentaire incomplet... – Possibilité de faire un « rebase » d'une branche • Attention : ces opérations sont puissantes mais potentiellement dangereuses • À ne faire que sur des commits locaux : si des commits qui ont été partagés (via git push ou git pull) sont affectés, vous allez vous faire des ennemis...
  • 21. Rebasing • Rebasing : prend tous les commits d'une branche à partir d'un certain point, et réapplique les changements introduits, dans l'ordre, à un autre endroit • Permet de garder une branche synchronisée avec le tronc, sans avoir à faire de merges successifs. • Les commits de la branche après un rebase sont de nouveaux commits • À ne faire que sur une branche locale !
  • 22. Rebase (1) • git rebase master feature1 X Y feature1 A B C D E F master HEAD
  • 23. Rebase (2) • Après rebase : même état que si la branche feature1 avait été créée à partir du commit F X Y X' Y' feature1 A B C D E F master HEAD
  • 25. Workflows • Git est un outil puissant, flexible, mais qui n'impose pas de workflow particulier : s'adapte à votre besoin – Utilisation en solitaire – Utilisation en environnement mixte (CVS/SVN) – Utilisation de type centralisée – Utilisation centralisée avec intégrateur – Utilisation de type « dictateur / lieutenant »
  • 26. Utilisation solitaire • Parfaitement adapté pour des projets personnels – Création d'un dépôt instantanée – Pas besoin de serveur – Tous les avantages d'une gestion de version : • Retours en arrière • Branches • ...
  • 27. Utilisation en environnement mixte • Des passerelles existent entre Git et d'autres VCS (CVS, SVN...) • Le premier « clone » récupère l'intégralité de l'historique : opération potentiellement lente • Ensuite, possibilité de synchroniser dans les 2 sens entre Git et CVS ou SVN • Avantages de Git pour son travail personnel (branches, rapidité, historique local, …) • Passage par CVS ou SVN pour la collaboration • Attention : CVS ou SVN imposent des limitations – Pas possible d'envoyer vers SVN des commits de merge – Utilisation fréquente du rebasing pour garder un historique plus linéaire
  • 28. Utilisation centralisée • Même si Git est un DVCS, il est possible de l'utiliser de manière centralisée • Utilisation courante en entreprise Dépôt partagé Dev A Dev B Dev C
  • 29. Utilisation centralisée avec intégrateur • Variante du workflow précédent : une seul personne est responsable de commiter sur le dépôt central Dépôt intégrateur partagé Dev A Dev B Dev C
  • 30. Organisation par équipe • Chaque équipe travaille indépendement • Un intégrateur intègre les différentes fonctionnalités et commite sur le dépôt central Dépôt Intégrateur partagé Team A Team B Dev 1 Dev 2 Dev 3 Dev 4
  • 31. Workflows • Git s'adapte à presque n'importe quel workflow • La principale difficulté de Git : trouver le bon workflow pour votre organisation !
  • 33. Outils • La ligne de commande ! – Reste le plus puissant (pemet le rebasing interactif) et souvent le plus rapide • Interfaces graphiques – Gitk : outil graphique fourni en standard. Basé sur des technos vieillissantes (Tcl/Tk) – GitX sous MacOs – gitg sous Gnome... – En mode texte : tig – TortoiseGit sous Windows • Intégration IDE : facilite les opérations de base, mais souvent incomplet pour les opérations complexes – Eclipse : plugin Egit, basé sur Jgit – Netbeans : module nbgit, basé sur Jgit – IDEA : en standard dans v9
  • 34. Outils • Plugin maven – Implémentation du plugin SCM pour Git • Serveurs de CI – Plugins pour Hudson, Bamboo... • Interfaces web – Gitweb fourni en standard : affichage basique des commits/branches/tags – Gitorious : permet les créations de dépôts, les clones, les demande de merge, etc... • Gitosis / Gitolite : gestion d'ACL – Permet de définir les permissions pour chaque utilisateur au niveau dépôt ou branche
  • 35. Outils • Gerrit : système de revue de code, initié par Google – Utilisé pour le developpement d'Android – Fonctionne comme un « faux » dépôt Git sur lequel on pousse des commits – Les utilisateurs peuvent alors revoir / commenter les patches – Lorsque le patch est approuvé, il est poussé vers le vrai dépôt central
  • 36. Conclusion • Essayez Git ! – Pas si difficile que ça avec la bonne approche → ne pas se dire que ça marche comme SVN ! – Ce n'est qu'un outil • De plus en plus difficile à ignorer – Bien implanté dans le monde open-source (Noyau Linux, X.org, VLC, Gnome, Wine…) – Commence à être populaire dans le monde Java : projet Maven, projet Eclipse, Android, … • Flexibilité, adapation à différents workflow • Se prête bien aux méthodologies Agiles : – Plus de puissance dans les mains des developpeurs – Responsabilisation
  • 38. Références • http://git-scm.com/ – Site officiel • http://progit.org/book/ – Très bon livre gratuit en ligne • http://gitref.org/ – Référence • http://nvie.com/git-model – Excellent post expliquant un modèle de branches • http://blog.javabien.net/2009/12/01/serverless-ci-with-git/ – Exemple d'integration continue sans serveur • http://www.kernel.org/pub/software/scm/git/docs/git-svn.html – Documentation de git-svn