Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction à Git et workflows - MarsJUG 2011

Introduction à Git et workflows - MarsJUG 2011

Jérémy Lecour

October 26, 2011
Tweet

More Decks by Jérémy Lecour

Other Decks in Technology

Transcript

  1. Introduction au versioning avec GIT
    et organisation d’une équipe
    MarsJUG - 26 Octobre 2011

    View Slide

  2. ATTENTION
    Cette présentation n’est pas :
    un court complet sur Git
    spécifique à Java, ni Eclipse
    payante
    un flim sur le cyclimse

    View Slide

  3. T’es qui ?
    0

    View Slide

  4. Jérémy
    Lecour

    View Slide

  5. developpeur web
    autodidacte, cuvée 1998

    View Slide

  6. membre actif et Président du
    Provence Linux
    User Group
    http://plugfr.org
    Venez, on est sympa aussi !

    View Slide

  7. Développeur et
    Directeur technique chez
    Autrement
    http://hotelhotel.com http://chambresapart.fr

    View Slide

  8. converti tardivement au
    versioning
    CP•OLD SVN GIT
    Ø

    View Slide

  9. [email protected]
    @jlecour
    jeremy.wordpress.com
    github.com/jlecour

    View Slide

  10. View Slide

  11. C’est quoi ?
    1

    View Slide

  12. Système de contrôle de
    versions, open-source,
    décentralisé, conçus pour être
    efficace et rapide.

    View Slide

  13. Système de contrôle de
    versions, open-source,
    décentralisé, conçus pour être
    efficace et rapide.

    View Slide

  14. Définition(s) ?
    C'est un dispositif, en général un logiciel, qui permet de conserver
    son travail dans le temps dans toutes les versions qu'on souhaite,
    de naviguer dans cet historique, de gérer des divergences et
    convergences de variantes et de travailler en équipe sans se
    marcher sur les pieds.

    View Slide

  15. Outils connus ?
    CP•OLD
    RCS, CVS, SVN,
    GIT, Mercurial, Bazar, Darcs, GNU Arch, Fossil,
    Perforce, IBM Rational, Visual SourceSafe, ClearCase, …
    # cp main.c main.c.old

    View Slide

  16. Système de contrôle de
    versions, open-source,
    décentralisé, conçus pour être
    efficace et rapide.

    View Slide

  17. license GPL v2

    View Slide

  18. développé par
    Linus Torvalds

    View Slide

  19. développement du
    noyau Linux

    View Slide

  20. multi-plateformes

    View Slide

  21. Système de contrôle de
    versions, open-source,
    décentralisé, conçus pour être
    efficace et rapide.

    View Slide

  22. tout est local
    ou presque

    View Slide

  23. échanges entre dépôts
    par le filesystem et/ou le réseau
    http • ssh • git • file

    View Slide

  24. tout l’historique
    est disponible, même hors connexion

    View Slide

  25. Péreine et fiable
    chaque copie est autonome
    et contient tout le projet
    = =

    View Slide

  26. Organisation libre
    quelques modèles possibles

    View Slide

  27. en étoile
    façon client/serveur
    developer
    developer developer
    shared
    repository

    View Slide

  28. developer
    public
    developer
    public
    dictator
    developer
    public
    blessed
    repository
    lieutenant
    lieutenant
    dictature
    façon hiérarchie militaire

    View Slide

  29. developer
    developer
    developer
    developer
    developer
    anarchique
    façon peer-to-peer

    View Slide

  30. intégration
    façon communauté
    developer
    public
    developer
    public
    integration
    manager
    developer
    public
    blessed
    repository
    developer
    private
    developer
    private
    developer
    private

    View Slide

  31. Système de contrôle de
    versions, open-source,
    décentralisé, conçus pour être
    efficace et rapide.

    View Slide

  32. GIT est bêtement
    une base de données clés/valeurs
    écrite en C, donc portable et rapide
    qui traque des contenus

    View Slide

  33. adapté à
    toutes les tailles
    d’équipes et de projets

    View Slide

  34. Concepts clés
    et points forts
    2

    View Slide

  35. delta vs. snapshot
    File A Δ1
    File B
    File C
    Version 1 Version 2 Version 3 Version 4 Version 5
    Δ2
    Δ1 Δ2
    Δ1 Δ2 Δ3
    A
    B
    C
    Version 1 Version 2 Version 3 Version 4 Version 5
    A1
    B
    C1
    A1
    B
    C2
    A2
    B1
    C2
    A2
    B2
    C3
    File A Δ1
    File B
    File C
    Version 1 Version 2 Version 3 Version 4 Version 5
    Δ2
    Δ1 Δ2
    Δ1 Δ2 Δ3
    A
    B
    C
    Version 1 Version 2 Version 3 Version 4 Version 5
    A1
    B
    C1
    A1
    B
    C2
    A2
    B1
    C2
    A2
    B2
    C3

    View Slide

  36. historique
    commit size
    commit size
    98ca9..
    tree
    author
    committer
    initial commit of my project
    0de24
    Scott
    Scott
    commit size
    34ac2..
    tree
    parent
    author
    committer
    fixed bug #1328 - stack
    overflow under certain
    184ca
    98ca9
    Scott
    Scott
    f30ab..
    tree
    parent
    author
    committer
    add feature #32 - ability to
    add new formats to the central
    34ac2
    Scott
    Scott
    Snapshot A Snapshot B Snapshot C
    92ec2

    View Slide

  37. commit • tree • blob
    blob size
    e8455..
    commit size
    98ca9..
    == LICENSE:
    (The MIT License)
    Copyright (c) 2007 Tom Preston-
    Permission is hereby granted, f
    ree of charge, to any person ob
    tree
    parent
    author
    committer
    my commit message goes here
    and it is really, really cool
    0de24
    nil
    Scott
    Scott
    tree size
    10af9..
    blob
    tree
    bc52a
    b70f8
    mylib.rb
    inc
    tree size
    b70f8..
    blob 0ad1a tricks.rb
    tree size
    0de24..
    blob
    tree
    e8455
    10af9
    README
    lib
    blob size
    bc52a..
    require 'grit/index'
    require 'grit/status'
    module Grit
    class << self
    attr_accessor :debug
    blob size
    0ad1a..
    require 'grit/git-ruby/reposi
    require 'grit/git-ruby/file_i
    module Grit
    module Tricks
    SHA1

    View Slide

  38. killer feature
    branches über faciles
    personnelles
    partageables
    éphémères
    durables
    légères
    C2
    C1
    master
    C3 C8
    C7 C9
    C5
    C4 C6
    topic-branch
    C10

    View Slide

  39. branches & tags
    = pointeurs
    Snapshot A Snapshot B Snapshot C
    98ca9 34ac2 f30ab
    master
    HEAD
    v1.0

    View Slide

  40. 3 zones
    Git Directory
    (Repository)
    Staging
    Area
    Working
    Directory
    stage files
    Checkout the project
    Commit
    Stage files

    View Slide

  41. commandes courantes
    init
    add
    rm
    mv
    status
    commit
    log
    diff
    show
    branch
    checkout
    merge
    tag
    clone
    fetch
    pull
    push
    remote
    reset
    rebase
    blame
    au moins 1x/semaine

    View Slide

  42. commandes bizarres
    géniales
    bisect
    rerere
    add -p
    cherrypick
    stash
    format-patch • apply-patch

    View Slide

  43. usages atypiques
    config système (ex. : /etc)
    articles et publications
    moteur de wiki
    documents partagés dans l’équipe
    distribution de ressources

    View Slide

  44. Les outils
    3

    View Slide

  45. Ligne de Commande
    l’interface canonique, identique partout

    View Slide

  46. GUI autonomes
    des clients graphiques spécialisés
    GITK GITX Tortoise Git

    View Slide

  47. intégration IDE
    pour les amateurs du “tout en un”
    EGit pour Eclipse IntelliJ IDEA Netbeans

    View Slide

  48. Questions
    sur Git
    4

    View Slide

  49. Workflows
    et gestion des projets en équipe
    5
    C’est pas trop tôt

    View Slide

  50. problématique
    construire un modèle de dev
    structurer les branches
    fiabiliser les processus de livraison

    View Slide

  51. git-flow
    un workflow complet
    adapté au développement logiciel
    pour des équipes structurées

    View Slide

  52. Time
    release branches
    master
    develop hot xes
    feature
    branches
    Feature
    for future
    release
    Tag
    1.0
    Major
    feature for
    next release
    From this point on,
    “next release”
    means the release
    after 1.0
    Severe bug
    xed for
    production:
    hot x 0.2
    Bug xes from
    rel. branch
    may be
    continuously
    merged back
    into develop
    Tag
    0.1
    Tag
    0.2
    Incorporate
    bug x in
    develop
    Only
    bug xes!
    Start of
    release
    branch for
    1.0
    Author: Vincent Driessen
    Original blog post: http://nvie.com/archives/323
    License: Creative Commons

    View Slide

  53. GitHub-flow
    beaucoup plus simple
    plus de responsablités
    adapté aux cycles courts

    View Slide

  54. Time
    master
    feature branches
    Author: Vincent Driessen
    Original blog post: http://nvie.com/archives/323
    License: Creative Commons

    View Slide

  55. et pour vous
    ça se passe comment ?

    View Slide

  56. Ressources
    6

    View Slide

  57. http://git-scm.com

    View Slide

  58. http://whygitisbetterthanx.com/

    View Slide

  59. http://progit.org/

    View Slide

  60. http://gitimmersion.com/

    View Slide

  61. http://gitref.org/

    View Slide

  62. Screencasts
    Peepcode :
    http://peepcode.com/products/git
    Destroy All Software :
    https://www.destroyallsoftware.com/screencasts/catalog/git-workflow

    View Slide

  63. Articles
    L’article complet sur git-flow :
    http://nvie.com/posts/a-successful-git-branching-model/
    Pourquoi vous n’utilisez vous toujours pas git-flow :
    http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/
    Le workflow en vigueur chez GitHub :
    http://scottchacon.com/2011/08/31/github-flow.html

    View Slide

  64. Formation
    Git-Attitude avec Christophe Porteneuve :
    http://www.git-attitude.fr/
    GitHub Training :
    https://github.com/training

    View Slide

  65. Crédits
    7

    View Slide

  66. Scott Chacon et le livre Progit pour des définitions et graphiques :
    http://progit.org/ • https://github.com/progit/progit
    Zach Holman pour les conseils sur la conception des slides :
    http://zachholman.com/posts/slide-design-for-developers/
    Yanone Kafeesatz pour cette magnifique police de caractères (CC BY 2.0) :
    http://www.yanone.de/typedesign/kaffeesatz/
    Vincent Driessen pour le graphique de git-flow :
    http://nvie.com/archives/323
    Les différents logos, marques et noms déposés que j’ai cité

    View Slide

  67. Merci

    View Slide