tutoriel git

of 83 /83
TRAVAIL COLLABORATIF EFFICACE AVEC GIT VERSION PYCHARM 18 mai 2016

Author: francois-andre

Post on 13-Apr-2017

2.406 views

Category:

Technology


1 download

Embed Size (px)

TRANSCRIPT

  • T R A V A I L C O L L A B O R A T I F E F F I C A C E A V E C G I T

    V E R S I O N P Y C H A R M

    18 mai 2016

  • O B J E C T I F S

    2

    1 C o m p r e n d r e l ' i n t r t d e s g e s t i o n n a i r e s d e c o d e

    2 E f f e c t u e r d e s m a n i p u l a t i o n s s i m p l e s

    3 D c o u v r i r u n e s t r a t g i e d e g e s t i o n d e s p r o j e t s

  • Introduction

  • Pourquoi ? Utiliser un Source Code Manager

  • P O U R S O I

    5

    Il est utile de pouvoir retrouver les diffrentes tapes de son travail d'avoir plusieurs versions de son travail en mme temps

  • P O U R S O N E Q U I P E

    6

    Toute production - code ou autre - fait partie du patrimoine de son quipe et doit tre conserve de manire prenne (c.a.d avec des pratiques connues)

  • P O U R N O S E Q U I P E S

    7

    Il est ncessaire d'outiller et organiser le travail collaboratif

  • Pourquoi ? GIT

  • P O U R Q U O I G I T ?

    9

    Il existe beaucoup de SCM : CVS, SVN, Git, Mercurial,... En gnral chaque nouvelle gnration d'outil rend la prcdente obsolte Git apporte beaucoup de souplesses :

    Le travail dconnect La possibilit de travailler facilement sur plusieurs versions de l'application (les branches)

    La version de production La version en dveloppement

    La possibilit de travailler plusieurs : Avec un serveur central Avec plusieurs serveurs centraux Directement entre plusieurs dveloppeurs

  • P O U R Q U O I G I T ?

    La plupart des oprations seffectuent

    sur le poste du dveloppeur sans

    passer par le rseau

    R a p i d e

    Git est disponible sur tous les systmes

    dexploitation. Il peut tre utilis en

    ligne de commande ou via un IDE.

    A g n o s t i q u e

    Il existe, sur Internet, un grand nombre de

    forge bases sur Git. Elles ajoutent des

    fonctionnalits sociales permettant de

    proposer des volutions, des corrections

    S o c i a l

    Via ses fonctionnalits, Git permet de

    mettre en place des organisations du

    dveloppement permettant de rsoudre les

    soucis usuels, par exemple GitFlow.

    E f f i c a c e

    10

  • Remarques

  • I D E U T I L I S E

    12

    Par dfaut Git s'utilise avec l'invite de commande Les principaux IDE (Eclipse, Netbeans, IntelliJ ...) masquent ces commandes en les intgrant leur interface Les exercices proposs utilisent gratuit l'IDE PyCharm (Community Edition) disponible ici : https://www.jetbrains.com/pycharm/. Toutefois, afin de permettre le passage vers d'autres IDE et l'appronfondissement de l'outil, les commandes sont indiques en marge des exercices

    L'onglet Console de PyCharm permet de voir les commandes effectues de manire sous-jacente.

    https://www.jetbrains.com/pycharm/

  • S E R V E U R G I T

    13

    Plusieurs serveurs Git en ligne et gratuits existent (GitHub, BitBucket,...) Il existe galement des serveurs installer localement (GitLab C.E.) Renater propose gratuitement une forge destine aux EPST, Sourcesup, offrant les fonctionnalits suivantes :

    Dpts publics/privs (Authentification base sur Sibboleth) Git Gestionnaire d'anomalies (Mantis BT) Wiki Moteur d'intgration continue (Jenkins)

    Sourcesup

    https://github.com/https://bitbucket.org/https://about.gitlab.com/https://about.gitlab.com/https://about.gitlab.com/http://sourcesup.renater.fr/

  • Quelques notions prliminaires

  • D E P O T L O C A L E T R E P E R T O I R E D E T R A V A I L

    15

    Pour chaque projet, Git utilise un rpertoire (.git) dans lequel il va mettre l'ensemble des donnes/mtadonnes permettant de retracer l'histoire du projet. C'est le dpt local du projet.

    Git va extraire de ce dpt une version du projet dans un rpertoire afin de permettre l'dition des fichiers. C'est le rpertoire de travail du projet. En gnral le dpt local est un sous rpertoire du projet

  • D E P O T L O C A L E T R E P E R T O I R E D E T R A V A I L

    16

    V e r s i o n d e t r a v a i l d u p r o j e t

    R p e r t o i r e d e t r a v a i l

    D p t l o c a l

  • Chaque fois qu'un projet est valid, Git stocke dans le dpt local, une image de tous les fichers composants alors le projet. On parle d'instantan.

    I N S T A N T A N E

    17

  • Avec Git, le cycle classique est le suivant : 1. On ajoute/supprime/modifie des fichiers dans l'espace de travail 2. On groupe l'ensemble de ces modifications (on parle d'indexation) 3. On valide (commit) ces modifications dans le dpt local en y associant un commentaire

    (exemple: correction de l'anomalie #145)

    E C H A N G E S L O C A U X

    18

  • Manipulations locales

  • Le projet peut dj exister ou n'tre qu'un rpertoire vide. Dans le menu VCS, slectionnez Enable Version Control Integration

    Dans la fentre popup, slectionnez Git et cliquez sur Ok

    A l'issue de la configuration, la barre de statut devrait afficher Git:master

    A J O U T E R G I T A U N P R O J E T

    20

  • A J O U T E R G I T A U N P R O J E T

    21

  • Il est utile de pouvoir facilement voir l'ensemble des fichiers ajouts/supprims/modifis et non ajouts au dpt local. Dans la barre de statut, faites apparatre le menu Version Control et cliquez dessus

    Cliquez sur Local Changes pour faire apparatre la liste des fichiers non valids

    C O N N A I T R E L E S F I C H I E R S N O N V A L I D E S

    22

  • Il est utile de pouvoir facilement voir l'ensemble des fichiers ajouts/supprims/modifis et non ajouts au dpt local. Dans la barre de statut, faites apparatre le menu Version Control et cliquez dessus

    Cliquez sur Local Changes pour faire apparatre la liste des fichiers non valids

    C O N N A I T R E L E S F I C H I E R S N O N V A L I D E S

    23

  • A J O U T E R D E S F I C H I E R S A U D E P O T L O C A L

    24

    Lajout de fichiers au dpt local sappelle un commit. Dans le projet, crez deux fichiers, fichier1.txt et fichier2.txt avec comme contenu Contenu du fichier X PyCharm vous propose par dfaut que ces fichiers soient grs par Git. Dclinez l'offre en cliquant sur No Vous pouvez vrifier dans Local Changes que les deux fichiers apparaissent dans la section Unversioned Files Slectionnez les fichiers (dans l'arboresence du projet), Dans le menu contextuel cliquez sur Git puis sur Add.

  • A J O U T E R D E S F I C H I E R S A U D E P O T L O C A L

    25

  • A J O U T E R D E S F I C H I E R S A U D E P O T L O C A L

    26

    Les fichiers sont dsormais indexs et vont pouvoir tre proposs au prochain Commit Cliquez sur l'icne de commit La fentre qui apparat indique les fichiers qui vont faire partie du commit. Vous pouvez en dslectionner. Indiquez un commentaire ainsi que le nom de l'auteur et cliquez sur Commit

  • A J O U T E R D E S F I C H I E R S A U D E P O T L O C A L

    27

  • I G N O R E R D E S F I C H I E R S

    28

    Certains fichiers ne doivent pas tre commits : Fichier spcifiques un IDE ou un poste de dveloppement Fichiers gnrs (.class, .jar)

    PyCharm propose un mcanisme propritaire pour ignorer les fichiers. Nous allons utiliser le mcanisme standard de Git qui repose sur un fichier nomm .gitignore

    Crez un fichier .gitignore la racine du projet Indiquez comme contenu /.idea.Cela signifie que tous les fichiers du rpertoire .idea seront ignors. La liste Unversioned Files n'affiche plus les fichiers du rpertoire .idea

  • I G N O R E R D E S F I C H I E R S

    29

    Le fichier .gitignore est un fichier ordinaire : il doit tre ajout au dpt et commit. La syntaxe du fichier .gitignore est dtaille ici : http://git-scm.com/docs/gitignore Des exemples de fichiers .gitignore adapts chaque language/framework sont disponibles : https://github.com/github/gitignore

    REMARQUES

    http://git-scm.com/docs/gitignorehttp://git-scm.com/docs/gitignorehttp://git-scm.com/docs/gitignorehttps://github.com/github/gitignore

  • S U P P R I M E R U N F I C H I E R

    30

    Lorsque que l'on supprime un fichier - via l'IDE par exemple - il faut rpercuter cette suppression au niveau du dpt local si celui-ci y tait dj prsent. Cette opration est similaire un commit. Crez un fichier fichier3.txt avec comme contenu Contenu du fichier 3. Ajoutez ce fichier au dpot local Supprimez le fichier dans l'arboresence du projet. Cliquez sur le bouton Commit

  • S U P P R I M E R U N F I C H I E R

    31

    Remarquez que cette fois-ci, la boite de dialogue indique que le commit va concerner une suppression. Commitez

  • R E N O M M E R U N F I C H I E R

    32

    Rpercuter le changement de nom d'un fichier prsent au dpt est un action similaire la suppression Renommez le fichier fichier2.txt en fichier2b.txt (via le menu contextuel)

    L'onglet Local Changes indique que le changement est un changement de nom

    Cliquez sur le bouton Commit

  • R E N O M M E R U N F I C H I E R

    33

    Remarquez que cette fois-ci, la boite de dialogue indique que le commit va concerner un changement de nom Commitez

  • C O N S U LT E R L H I S T O R I Q U E

    34

    L'onglet Log permet de consulter l'historique du projet : les diffrents commits (avec leur messages) les diffrentes branches Dans le fichier fichier1.txt ajoutez une ligne ayant comme contenu Ligne ajoute ultrieurement Commitez le fichier

  • C O N S U LT E R L H I S T O R I Q U E

    35

    Pour chaque commit, les diffrents fichiers concerns sont affichs sur le panneau de droite. Dans le menu contextuel, Show Diff with local permet de voir les diffrences par rapport au rpertoire de travail

  • C O N S U LT E R L H I S T O R I Q U E

    36

    Il est galement possible de connaitre l'historique d'un fichier unique

  • C O N S U LT E R L H I S T O R I Q U E

    37

  • A J O U T E R D E S E T I Q U E T T E S ( T A G )

    38

    Une tiquette permet de donner un nom sur un instantann afin d'tre facilement identifiable par la suite. Par exemple, cela permet d'associer un numro de version un tat du projet.

    Dans la vue Log, slectionnez le commit tagger et fates apparatre le menu contextuel Slectionnez la commande New Tag...

  • A J O U T E R D E S E T I Q U E T T E S ( T A G )

    39

    Indiquez le nom de l'tiquette et validez L'tiquette est visible dans la vue Log

  • R E M P L A C E R P A R U N E V E R S I O N A N T E R I E U R E

    40

    La commande git checkout permet de naviguer entre les branches et les commits (cf. infra). Elle peut toutefois tre utilise pour restaurer un fichier dans une version plus ancienne. Par exemple fichier3.txt. Identifiez l'identifiant du commit contenant la version de fichier3.txtsouhaite via la vue Log. Dans notre cas 479b5c7.

    Ouvrir un terminal dans le rpertoire racine du projet

  • R E M P L A C E R P A R U N E V E R S I O N A N T E R I E U R E

    41

    Lancez la commande git checkout 479b5c7 fichier3.txt Le fichier a t restaur et est prsent dans l'espace de travail comme un nouveau fichier.

  • R E P A R T I R D U N C O M M I T A N T E R I E U R

    42

    Il peut tre utile - mais dangereux - de repartir d'un commit plus ancien et de supprimer les commits survenus depuis. Dans la fentre Log, slectionnez le commit partir duquel vous voulez repartir. Dans le menu contextuel, slectionnez la commande Reset current branche to here...

  • R E P A R T I R D U N C O M M I T A N T E R I E U R

    43

    Dans la boite de dialogue choisissez l'option adapte votre besoin et validez en cliquant sur Reset. Il est peut-tre plus prudent de crer une branche partir du commit identifi.

  • Les branches Partie 1 : la thorie

  • P O U R Q U O I A V O I R B E S O I N D E B R A N C H E S ?

    45

    Il peut tre ncessaire de travailler simultanment sur plusieurs versions du code:

    Version en production Version en dveloppement ...

    Le concept de branche rpond ce besoin et les diffrents SCM le mettent en uvre. Toutefois, gnralement, l'implmentation propose fait que le concept est rarement utilis. Exemple: En SVN, les branches sont gres sur le serveur et le temps de cration des branches puis de bascule d'une branche l'autre est rdhibitoire. Avec Git, les branches sont trs simples grer et le passage entre deux branches est quasi instantan.

  • G I T F L O W

    46

    En 2010, Vincent Driessen publie un article intitul A successful Git branching model (http://nvie.com/posts/a-successful-git-branching-model/) proposant une mthodologie efficace pour grer les projets avec Git grce aux branches. Cette mthodologie a t rapidement adopte par beaucoup de grands acteurs du dveloppement, notamment dans le cadre de mthodologie agile.

    http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/http://nvie.com/posts/a-successful-git-branching-model/

  • G I T F L O W

    47

  • G I T F L O W

    48

    Branches prennes

    master : branche correspondant au code en production develop : branche correspondant au code en dveloppement

    Branches transitoires Feature : pour toute nouvelle fonctionalit ou correction de bug Hotfix: correction de bug en production Release : livraison

    Principaux points

  • G I T F L O W

    49

    Une surcouche Git en mode commande est galement disponible mettant en oeuvre de manire explicite les principes de GitFlow. Toutefois, elle n'est pas indispensable.

    Remarque

    http://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.html

    http://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.htmlhttp://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.htmlhttp://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.htmlhttp://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.htmlhttp://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.html

  • C O M M E N T G I T G E R E L E S B R A N C H E S ?

    50

    Chaque commit entrane la cration d'un instantan identifi par un numro unique. Avec Git, une branche est simplement un pointeur vers un instantan Un pointeur spcial, HEAD, indique la branche courante.

  • C O M M E N T G I T G E R E L E S B R A N C H E S ?

    51

    Crer une nouvelle branche revient donc ajouter un nouveau pointeur sur l'instantan courant.

    Changer de branche consiste basculer vers l'instantan point par la branche et mettre jour le pointeur HEAD.

  • C O M M E N T G I T G E R E L E S B R A N C H E S ?

    52

    Lors des commits suivants seul le pointeur de la branche actuelle va se dplacer.

  • L E S F U S I O N S

    53

    Deux cas se prsentent en gnral 1. La branche qui va recevoir la fusion est un anctre de la branche fusionner 2. La branche qui va recevoir la fusion n'est pas un anctre de la branche fusionner

  • L E S F U S I O N S

    54

    Ce cas est trs simple, la fusion revient simplement dplacer le curseur de la branche recevante sur l'instantan point par la branche fusionner.

    Cas 1 : La branche qui va recevoir la fusion est un anctre de la branche fusionner

    Avant fusion Aprs fusion

  • L E S F U S I O N S

    55

    Ce cas est potentiellement compliqu car certains fichiers ont pu tre modifis dans les deux branches, il va falloir fusionner ces fichiers via un nouvel instantan.

    Cas 2 : La branche qui va recevoir la fusion n'est pas un anctre de la branche fusionner

    Avant fusion Aprs fusion

  • Les branches Partie 2 : la pratique

  • C R E R U N E B R A N C H E

    57

    La branche courante est indique droite de la barre de statut. Par dfaut, la 1re branche s'appelle master. Pour crer une nouvelle branche et basculer dessus : Cliquez sur la branche actuelle afin de faire apparaitre le menu droulant et slectionnez l'action New Branch

  • C R E R U N E B R A N C H E

    58

    Dans la boite de dialogue, indiquez le nom de la nouvelle branche :develop La vue Log affiche les deux branches au niveau du dernier commit

  • C R E R U N E B R A N C H E

    59

    La barre de statut indique dsormais develop comme branche actuelle. Crez de la mme manire une branche nomme feature_MaFonction et basculez dessus.

  • B A S C U L E R D U N E B R A N C H E A L A U T R E

    60

    Le menu droulant des branches indique les diffrentes branches prsentes Pour basculer d'une branche l'autre, il suffit de chosir la branche cible dans le menu et de cliquer sur Checkout

    La bascule est trs rapide car totalement locale.

  • B A S C U L E R D U N E B R A N C H E A L A U T R E

    61

    Remarque : le fichier fichier3.txt est prsent dans la nouvelle branche.

  • F U S I O N S I M P L E ( F A S T F O R W A R D )

    62

    Dans fichier1.txt ajoutez une nouvelle ligne (Ligne ajoute dans MaFonction) Ajoutez un fichier fichier4.txt avec comme contenu la ligne Contenu du fichier4.txt Commitez le fichier 1 et le fichier 4 avec un commentaire identifi (modification pour MaFonction)

    Basculez sur la branche develop (le fichier fichier1.txt est affich dans son tat antrieur, le fichier fichier4.txt absent) Dans le menu des branches, slectionnez la branche feature_MaFonctionet cliquez sur merge

  • F U S I O N S I M P L E ( F A S T F O R W A R D )

    63

    Le fichier 1 modifi et le fichier 4 sont bien prsents En fait Git n'a fait que dplacer le pointeur de la branche develop sur la branche feature_MaFonction

  • F U S I O N A V E C C O N F L I T

    64

    Supprimez le fichier fichier3.txt Demandez la fusion avec la branche Hotfix_1 Il y a dans ce cas, un conflit avec les deux versions de fichier1.txt

    Cliquez sur Merge. Dans la boite de dialogue, fusionnez manuellement les deux fichiers

    Validez en cliquant sur Apply.

  • F U S I O N A V E C C O N F L I T

    65

    La situation est alors la suivante :

    Notez la prsence du commit de fusion.

  • S U P P R E S S I O N D E B R A N C H E

    66

    Les branches Hotfix_1 et feature_MaFonction sont des branches temporaires. Elles peuvent tre supprimes.

    Dans le menu des branches, slectionnez chacune de ces deux branches et cliquez sur Delete

    Remarque: Git vous avertit si vous tentez de supprimer une branche n'ayant jamais t fusionne

  • changer avec d'autres dveloppeurs : les dpts distants

  • L E S D E P O T S D I S T A N T S ( R E M O T E )

    68

    Objectifs Les dpots vont permettre aux dveloppeurs de partager leur travail. Ils peuvent aussi servir de dpt de rfrence pour l'intgration continue

    Git offre beaucoup de souplesse dans la gestion des dpts distants : Nature (cloud, disque partag, cl usb...) Protocole (SSH, Git, HTTPS...) Nombre (utilisation de plusieurs dpts...) Structure (communication directe entre dveloppeur, serveur central ...) Dans notre exercice nous allons crer un dpt distant ...local au poste de travail.

  • C R E A T I O N D U D E P O T D I S T A N T

    69

    Dans un terminal crez un rpertoire monDepotGit.git Entrez dans le rpertoire Tapez la commande git init bare

    Remarque: par convention, le nom des dpts Git finit par .git

  • C O N N E X I O N A U D E P O T D I S T A N T

    70

    Dans Pycharm, via le menu contextuel du projet, utilisez la commande Git > Repository > Push Push est la commande qui indique Git de transfrer des fichiers vers le dpt distant.

  • C O N N E X I O N A U D E P O T D I S T A N T

    71

    Dans la fentre qui s'ouvre cliquez sur Define remote

    Laissez le nom origin Indiquez comme URL l'adresse de votre dpt distant et validez en cliquant sur Ok

  • C O N N E X I O N A U D E P O T D I S T A N T

    72

    origin est le nom d'usage pour le serveur distant central. L'URL indique le protocole de connexion :

    HTTPS : https://github.com/francoisandre/gtdrosea_workshop.git SSH : [email protected]:francoisandre/gtdrosea_workshop.git

    Finalisez le transfert en Cliquant sur Push tags Cliquant sur Push

    Remarques

    https://github.com/francoisandre/gtdrosea_workshop.git

  • C O N N E X I O N A U D E P O T D I S T A N T

    73

  • R E C U P E R A T I O N D U D E P O T D I S T A N T

    74

    Nous allons rcuprer le projet partir du dpt distant pour simuler un deuxime dveloppeur Dans le menu VCS, Slectionnez Checkout from Version Control puis Git Le terme Checkout est ici inadapt, il s'agit d'un Clone qui va - par dfaut - rcuprer l'intgralit de l'historique du projet

  • R E C U P E R A T I O N D U D E P O T D I S T A N T

    75

    Indiquez l'adresse du dpt distant Indiquez comme nom de projet monProjetDev2 Validez en cliquant sur Clone

    Validez les botes de dialogues qui apparaissent alors et indiquez que vous souhaitez voir le projet dans une nouvelle fentre

    Dans la barre de statut vous remarquez que Git est activ et pointe alors sur la branche master qui n'existe pas dans notre dpt distant.

  • R E C U P E R A T I O N D U D E P O T D I S T A N T

    76

    Dans la barre de statut, choisissez la branche develop et cliquez sur Checkout as new local branch...

    A l'issue du traitement, on retrouve le projet complet dans l'environnement du deuxime dveloppeur

  • T R A N S F E R T D U C O M M I T ( P U S H )

    77

    Dans monProjetDev2, crez un fichier fichier5.txt avec comme contenuContenu du fichier fichier5.txt Faites un commit de ce fichier, mais dans la fentre de commit

    Indiquez comme auteur Developpeur 2 Choisissez l'option Commit and push...

    Cliquez sur Push dans la fentre suivante Le contenu du commit a t transfr sur le dpt distant

  • R E C U P E R A T I O N D U C O M M I T ( P U L L )

    78

    Dans monProjet, partir du menu contextuel du projet choisissez Git > Repository > Pull Validez la fentre suivante en cliquant sur Pull

  • R E C U P E R A T I O N D U C O M M I T ( P U L L )

    79

    Le commit contenant fichier5.txt a t rcupr dans monProjet

  • R E M A R Q U E S S U R L E S R E M O T E S

    80

    Avec les remotes, les dveloppeurs vont tre confronts aux problmes classiques de fusions, vus prcdemment Des nouveaux problmes vont apparatre : suppression de branches distantes, ...

  • Conclusion

  • P O U R A L L E R P L U S L O I N

    82

    Pro Git (par Scott Chacon)

    Ouvrage de rfrence Disponible gratuitement en franais : https://git-scm.com/book/fr/v2(diffrents formats: pdf, html, epub...)

    Tutoriel(s) http://www.grafikart.fr/formations/git

    https://git-scm.com/book/fr/v2https://git-scm.com/book/fr/v2https://git-scm.com/book/fr/v2http://www.grafikart.fr/formations/githttp://www.grafikart.fr/formations/git

  • M e r c i

    www.aeris-data.fr

    Modle de prsentation : ttp://thepopp.com/ - Jun Akizak

    http://thepopp.com/http://thepopp.com/http://thepopp.com/