Les bases de git

96
git pour les novices Pierre Sudron Association Atilla 10 aoˆ ut 2013

description

Découvrez les principes et fonctionnalités essentielles de git. Soyez prêts à travailler en 3 heures. La dernière version est disponible en téléchargement direct à cette adresse : http://giant-teapot.org/uploads/tutorials/git_tutorial.pdf Diaporama pour la formation git réalisée pour l'association Atilla, septembre 2012.

Transcript of Les bases de git

Page 1: Les bases de git

git pour les novices

Pierre Sudron

Association Atilla

10 aout 2013

Page 2: Les bases de git

git est un systeme de gestion de sources

• gerer l’evolution d’un code

• partager efficacement son travail en equipe

• garder un historique de l’evolution d’un projet

• travailler en parallele

2 / 96

Page 3: Les bases de git

Autres systemes existants

• Subversion (svn)

• Mercurial (Hg)

• Bazaar (bzr)

• autres systemes proprietaires

3 / 96

Page 4: Les bases de git

Plus particulierement sur git

• cree pour le noyau Linux

• developpe par Junio Hamano

• distribue et tres flexible

• adoption rapide et massive depuis 2005

4 / 96

Page 5: Les bases de git

Qu’est-ce que git peut m’apporter ?

• suivi precis de l’avancement d’un projet

• souplesse dans l’evolution

• facilite de mise en commun

5 / 96

Page 6: Les bases de git

Integration douloureuse : un projet qui fait plouf

Bob et Bob travaillent sur un projetet se repartissent les taches

6 / 96

Page 7: Les bases de git

A deux jours du livrable...

Bob a bien avance sur sa partie

7 / 96

Page 8: Les bases de git

Bob pas tellementmais il a fait quelque chose au moins

8 / 96

Page 9: Les bases de git

C’est l’heure de mettre en commun !

Et quelle surprise, ca marche pas !

9 / 96

Page 10: Les bases de git

Et a 24 heures du rendu, c’est un peu cuit...

10 / 96

Page 11: Les bases de git

L’integration progressive

• git incite a mettre en commun tres regulierement

• en cas d’ennui, il est possible de revenir a la derniere versionfonctionnelle

• de la, il est facile de voir les modifications ulterieures et isoler lecode en cause

11 / 96

Page 12: Les bases de git

De quoi ai-je besoin ?

Ouvrir un terminal(mais sous Linux, hein...)

12 / 96

Page 13: Les bases de git

Principes de fonctionnement

En local, on travaille avec 3 elements :

dossier detravail

fichiersindexes

depot local

13 / 96

Page 14: Les bases de git

Contenu d’un depot git

Succession de commits

Un commit est un jeu de modifications, c’est l’atome de git.

14 / 96

Page 15: Les bases de git

Mise en commun

Synchronisation entre le depot local et un depot distant

15 / 96

Page 16: Les bases de git

Partie 1 : C’est un voyage qu’il faut commencer seulversionnage d’un simple fichier texte

16 / 96

Page 17: Les bases de git

Configuration de git : qui suis-je ?

git retrace l’evolution du projet ainsi :

qui a fait quoi, et quand

Pour definir qui est l’utilisateur :

g i t c o n f i g −−g l o b a l u s e r . name ” Votre nom”g i t c o n f i g −−g l o b a l u s e r . e m a i l ” r o o t @ a t i l l a . o rg ”

Pour activer la couleur dans le terminal :

g i t c o n f i g −−g l o b a l c o l o r . u i auto

17 / 96

Page 18: Les bases de git

Preparer le projet

Se placer dans le dossier de travail (le creer si besoin) :

mkdir ˜/ f o r m a t i o n g i tcd ˜/ f o r m a t i o n g i t /

Initialiser git dans ce repertoire :

g i t i n i t

18 / 96

Page 19: Les bases de git

Comment ca se presente

repertoire de travail : vide

fichiers indexes : vide

depot local : initialise et vide

19 / 96

Page 20: Les bases de git

Creer un fichier

Sans changer de dossier, creer un fichier README avec le contenusuivant :

Format ion g i t

Enregistrer le fichier

20 / 96

Page 21: Les bases de git

Comment ca se presente

repertoire de travail : README

fichiers indexes : vide

depot local : initialise et vide

21 / 96

Page 22: Les bases de git

Constater les changements avec git status

g i t s t a t u s

README n’est pas indexe, on nous propose d’utiliser git add

22 / 96

Page 23: Les bases de git

Indexer un fichier avec git add

g i t add README

23 / 96

Page 24: Les bases de git

Comment ca se presente

repertoire de travail : README

fichiers indexes : README (nouveau fichier)

depot local : initialise et vide

24 / 96

Page 25: Les bases de git

Constater les changements avec git status

g i t s t a t u s

README est dans l’index en tant que nouveau fichier

25 / 96

Page 26: Les bases de git

Notre premier git commit

On va mettre a jour le depot local et laisser une trace de la creationdu fichier README

g i t commit −m ” Ajout du f i c h i e r README”

Tout commit est decrit par un message, il doit etre :

• precis

• concis

26 / 96

Page 27: Les bases de git

Comment ca se presente

repertoire de travail : README

fichiers indexes : vide

depot local : commit #1

(verifier avec git status)

27 / 96

Page 28: Les bases de git

Historique des commits

28 / 96

Page 29: Les bases de git

Poursuivons le travail...

Ajouter une ligne a la fin du fichier README :

Format ion g i tAvec l ’ a s s o c i a t i o n A t i l l a

Enregistrer le fichier

29 / 96

Page 30: Les bases de git

Comment ca se presente

repertoire de travail : README (modifie)

fichiers indexes : vide

depot local : commit #1

30 / 96

Page 31: Les bases de git

Constater les changements avec git status

g i t s t a t u s

Les fichiers modifies sont detectes ; on propose de les indexer avec gitadd

31 / 96

Page 32: Les bases de git

Indexation du fichier modifie

g i t add README

repertoire de travail : README (modifie)

fichiers indexes : README (modifie)

depot local : commit #1

(verifier avec git status)

32 / 96

Page 33: Les bases de git

Validation des changements

g i t commit −m ” M o d i f i c a t i o n du f i c h i e r README”

repertoire de travail : README (modifie)

fichiers indexes : vide

depot local : commit #1, commit #2

(verifier avec git status)

33 / 96

Page 34: Les bases de git

Historique des commits

34 / 96

Page 35: Les bases de git

Historique des commits

g i t l o g

35 / 96

Page 36: Les bases de git

Export vers un depot git en ligne

Nous utiliserons une instance GitLab disponible a l’adresse :

http://gitlab.etude.eisti.fr/

Il existe de nombreux sites permettant d’heberger vos projets git,dont :

• GitHub

• Gitorious

36 / 96

Page 37: Les bases de git

Se connecter et ajuster son profil sur GitLab

37 / 96

Page 38: Les bases de git

Creer un projet sur GitLab

38 / 96

Page 39: Les bases de git

Creer une cle SSH

Ouvrez un nouveau terminal :

ssh−keygen −t r s a −C ” e m a i l @ t r o l l . com”

La cle SSH permet :

• de vous identifier formellement

• de crypter de transfert de code entre vous et le serveur

39 / 96

Page 40: Les bases de git

Indiquer la cle publique a GitLab

Le RSA est un cryptage asymetrique, et cree un jeu de deux cles

• une cle privee

• une cle publique

Pour afficher la cle publique :

c a t . s s h / i d r s a . pub

• ajouter la cle publique au trousseau GitLab

(vous pouvez fermer le second terminal et revenir au precedent)

40 / 96

Page 41: Les bases de git

Ajouter le depot dans votre projet

g i t remote add o r i g i n [ a d r e s s e du depot ]

• origin : nom donne au serveur distant par convention

Vous trouverez l’adresse de votre depot sur sa page d’accueil.

41 / 96

Page 42: Les bases de git

Mettre le projet en ligne !

g i t push −u o r i g i n master

• origin : nom donne au serveur distant par convention

• master : nom donne au depot local par defaut

master origin

42 / 96

Page 43: Les bases de git

Voir le resultat sur GitLab

Il ne reste plus qu’a constater le resultat avec satisfaction !

43 / 96

Page 44: Les bases de git

avant de continuer...

la Pause !

44 / 96

Page 45: Les bases de git

Partie 2 : Travailler a plusieursdecouverte des fonctionnalites de partage

45 / 96

Page 46: Les bases de git

De quoi ai-je besoin ?

logiciel Meldprenez un moment pour l’installer avant de continuer...

46 / 96

Page 47: Les bases de git

Acces aux projets

Un projet n’est visible que pour les membres de l’equipe en charge.

Les equipes comportent differents niveaux de responsabilite :

• Master

• Developer

• Reporter

• Guest

47 / 96

Page 48: Les bases de git

Cloner un depot existant

• recuperer l’adresse du depot

• cloner le depot (cette operation cree le repertoire du projet)

g i t c l o n e [ a d r e s s e ]

48 / 96

Page 49: Les bases de git

Cloner un depot existant

Le projet Participants formation contient un seul fichier dans lequelchacun va ajouter son nom.

• assurez-vous que vous etes inscrit au projet comme developpeur

• clonez le depot sur votre machine

• tout le monde doit etre a la meme version

49 / 96

Page 50: Les bases de git

Allons y...

• ajoutez votre nom a la fin du fichier

• faites un commit

• essayer de push...

oui, ca veut direPA - TA - TRAS !

50 / 96

Page 51: Les bases de git

Qu’est-ce que j’ai fait pour meriter ca ?

Si il y a un mot a retenir dans le message d’erreur :

non-fast-forward signifie que vous ecraseriez les commits d’autres sigit vous laissait push.

51 / 96

Page 52: Les bases de git

Qu’est-ce qui s’est passe ?

Un fichier a ete modifie et mis en ligne depuis votre dernier pull.

52 / 96

Page 53: Les bases de git

Comment s’en sortir ?

On souhaiterait appliquer nos commits a la suite de ceux des autres.

C’est une operation de rebase.

53 / 96

Page 54: Les bases de git

Chacun son tour

• recuperer les derniers commits en ligne et rebaser nos commits apartir de la

g i t p u l l −−r e b a s e

• cette operation peut soulever un conflit bloquant car plusieurspersonnes ont modifie le meme fichier

54 / 96

Page 55: Les bases de git

Les conflits

Un conflit a lieu quand on cherche a mettre en commun deux fichiersdont les memes sections ont ete modifiees par deux personnes.

55 / 96

Page 56: Les bases de git

Resoudre un conflit bloquant un rebase

Le message d’erreur du "pull –rebase nous indique les deux etapes asuivre :

• corriger les conflits dans les fichiers continus

• achever et valider le rebase avec

g i t r e b a s e −−c o n t i n u e

56 / 96

Page 57: Les bases de git

Gerer les conflits avec une interface

Pour resoudre le conflit nous allons utiliser l’ONU Meld. Notez qu’ilexiste enormement de logiciels equivalents.

• definir Meld comme outil de gestion de conflit

g i t c o n f i g −−g l o b a l merge . t o o l meld

• commencer a gerer le conflit

g i t m e r g e t o o l

57 / 96

Page 58: Les bases de git

Gerer des conflits avec une interface

Meld (comme ses equivalents) presente sur trois colonnes, troisversion du fichier :

• locale a gauche : votre derniere version de la branche receptrice

• remote a droite : la derniere version de la branche a fusionner

• origin au centre : la derniere version commune aux deux branches

Dans la pratique, on enregistrera le resultat voulu dans la colonnecentrale, c’est a dire sur origin.

58 / 96

Page 59: Les bases de git

Finaliser la resolution de conflits

mergetool cree un fichier de sauvegarde <fichier>.orig, on peutles supprimer une fois la session mergetool terminee

Il reste a teminer l’operation de rebase

g i t r e b a s e −−c o n t i n u e

59 / 96

Page 60: Les bases de git

Partager son travail

Il n’y a plus de probleme de fast forward : on peut desormais push.

60 / 96

Page 61: Les bases de git

Partie 3 : Comment ca va vieille branche ?developper en parallele

61 / 96

Page 62: Les bases de git

De quoi ai-je besoin ?

logiciel Meld

62 / 96

Page 63: Les bases de git

C’est l’histoire d’un prof...

Jean-Paul a fini de rediger le poly du cours de cette annee, en LATEXbien entendu !Il souhaite continuer a rajouter des parties pour l’annee suivante touten gardant une version de cette annee afin de corriger les coquillesque ses eleves lui signalent.Mais comme Jean Paul n’est pas tres organise, nous allons l’aider amieux gerer son texte de cours avec git et les branches !

63 / 96

Page 64: Les bases de git

Le principe des branches

Fourche dans le processus de developpement du projet. Une branchedemarre a partir d’un commit donne.

64 / 96

Page 65: Les bases de git

Le principe des branches

Nous allons creer une branche dediee aux corrections des fautesd’orthographe sur une branche partant de la version distribuee du poly.

65 / 96

Page 66: Les bases de git

Preparation du projet

• creer un dossier formation git branches

• deplacer le fichier cours.tex fourni dans ce dossier

cd f o r m a t i o n g i t b r a n c h e s

g i t i n i t

g i t g i t add c o u r s . t e x

g i t commit −m ” V e r s i o n r e n t r e e ”

66 / 96

Page 67: Les bases de git

Creer une branche

La branche est creee a partir du dernier commit local (HEAD).

g i t branch r e n t r e e s u i v a n t e

Pour lister les branches existantes :

g i t branch

67 / 96

Page 68: Les bases de git

Sauter de branche en branche

g i t c h e c k o u t r e n t r e e s u i v a n t e

La commande git branch donne le resultat suivant :

68 / 96

Page 69: Les bases de git

Ajouter un nouveau paragraphe pour la rentreeprochaine

Jean-Paul, studieux comme toujours, ne tarde pas a rajouter ducontenu pour l’annee prochaine.

Editer le fichier cours.tex en ajoutant une ligne a la fin.Sauvegarder, fermer l’editeur de texte et commiter.

g i t add c o u r s . t e xg i t commit −m ” Nouveau p a r a g r a p h e ”

69 / 96

Page 70: Les bases de git

Revenir sur la branche principale pour une correction

Mince ! On a signale la presence de fautes d’orthographe dans le polyde cette annee.

Retourner sur la branche principale

g i t c h e c k o u t master

Ouvrir le fichier cours.tex avec un editeur. Verifier qu’il s’agit biende la version de cette rentree.Corriger les fautes, enregistrer, commiter.

70 / 96

Page 71: Les bases de git

Visualiser les commits selon leur branche

g i t l o g −−o n e l i n e −−graph −−a l l

le log se lit de bas en haut

71 / 96

Page 72: Les bases de git

Fusionner deux branches

La rentree suivante est arrivee (ca passe vite), et Jean-Paul voudraitintegrer ses nouvelles parties tout en conservant les corrections faitesen cours d’annee.

72 / 96

Page 73: Les bases de git

Fusionner deux branches

Se placer dans la branche qui va ”integrer” les commits de l’autre

g i t c h e c k o u t master

Realiser la fusion

g i t merge r e n t r e e s u i v a n t e

... et la : Merge conflict !

Certains paragraphes ont un contenu different, il va falloir gerer ca ala main.

73 / 96

Page 74: Les bases de git

Gerer un merge conflict

Ouvrir le fichier cours.tex. git a modifie son contenu pour mettre enevidence le conflit.

<<<<<<< HEADa n c i e n contenu

=======nouveau contenu

>>>>>>> r e n t r e e s u i v a n t e

git status permet de voir sur quels fichiers il existe des conflits :

74 / 96

Page 75: Les bases de git

Gerer un merge conflict

La demarche a suivre pour resoudre le conflit :

• corriger les conflits dans chaque fichier concerne

• verifier que tous les conflits sont corriges avec git status

• indexer (git add) tous les fichiers modifies dans la manipulation

• commiter (git commit), on appelle ca un ’merge commit’

75 / 96

Page 76: Les bases de git

Corriger des conflits dans un fichier plus facilement

Il est assez complique de s’en sortir avec ca :

<<<<<<< HEADa n c i e n contenu

=======nouveau contenu

>>>>>>> r e n t r e e s u i v a n t e

On va utiliser un outil graphique : Meld (il existe enormementd’equivalents)

76 / 96

Page 77: Les bases de git

Corriger des conflits dans un fichier plus facilement

g i t m e r g e t o o l

mergetool va lancer Meld (ou equivalent) pour chaque fichier ou il y aun conflit.

77 / 96

Page 78: Les bases de git

Utiliser Meld

Meld (et equivalents) presente sur trois colonnes, trois version dufichier :

• locale a gauche : votre derniere version de la branche receptrice

• remote a droite : la derniere version de la branche a fusionner

• origin au centre : la derniere version commune aux deux branches

Dans la pratique, on enregistrera le resultat voulu dans la colonnecentrale, c’est a dire sur origin.

78 / 96

Page 79: Les bases de git

Finaliser la resolution de conflits

mergetool cree un fichier de sauvegarde <fichier>.orig, on peutles supprimer une fois la session mergetool terminee

Il faut faire un merge commit : valider la resolution des conflits ausein d’un commit

g i t s t a t u sg i t add c o u r s . t e xg i t commit −m ”Merge dans master de r e n t r e e s u i v a n t e ”

79 / 96

Page 80: Les bases de git

Mettre en ligne votre branche

g i t push o r i g i n [ ma branche ]

ma branche origin

80 / 96

Page 81: Les bases de git

Terminer une branche

g i t branch −d r e n t r e e s u i v a n t e

Il possible de terminer seulement une branche qui a ete merge et n’apas ete modifiee depuis. Pour forcer la suppression d’une branche :

g i t branch −D r e n t r e e s u i v a n t e

81 / 96

Page 82: Les bases de git

Partie 4 : remonter le tempsC’est moi Doc ! Je suis de retour du futur...

82 / 96

Page 83: Les bases de git

Acces a un commit

• HEAD : dernier commit de la branche courante

• nom branche/HEAD : dernier commit de la branche nom branche

• donner le nom d’une branche revient a pointer vers le derniercommit de cette branche

Il est possible de se ”deplacer” relativement a un commit

• HEADˆ : un commit avant HEAD

• HEADˆˆ : deux commits avant HEAD

• HEAD˜42 : quarante deux commits avant HEAD

83 / 96

Page 84: Les bases de git

Acces a un commit

• trouver l’identifiant court d’un commit

g i t l o g −−o n e l i n e

• master@{20/09/2012} : prendre un commit a une date donnee

84 / 96

Page 85: Les bases de git

Voyager dans le temps

• mettre un fichier tel qu’il etait a un commit donne

g i t c h e c k o u t [ nom commit ] [ f i c h i e r ]

Cette manipulation modifie directement le fichier dans votrerepertoire de travail.

• remettre un fichier ”en l’etat”

g i t c h e c k o u t HEAD [ f i c h i e r ]

85 / 96

Page 86: Les bases de git

Annexe 1 : Quelques conseilstout va bien se passer...

86 / 96

Page 87: Les bases de git

Commitez bien, commitez souvent

• segmentez les taches, faites un commit des que possible

• ne commitez pas sciemment un code qui ne marche pas

87 / 96

Page 88: Les bases de git

Les branches c’est bon, mangez-en !

• separez les taches independantes

• n’hesitez pas a faire des experimentations dans une branche dediee

• gardez une branche ”stable” a tout moment de votredeveloppement

88 / 96

Page 89: Les bases de git

Jouez collectif

• organisez-vous et concertez-vous avec vos partenaires

• donnez des titres comprehensibles a vos commits

• suivez les avancees des autres, donnez votre avis

• construisez votre cycle de developpement intelligemment : enfonction de la taille et la nature de votre equipe, vos deadlines, etc.

89 / 96

Page 90: Les bases de git

Annexe 2 : Guide de survieComme Rambo, mais en mieux.

90 / 96

Page 91: Les bases de git

Au debut de la journee de travail

• je commence toujours par recuperer le travail des autres

g i t p u l l

• je verifie sur quelle branche je me trouve

g i t branchg i t c h e c k o u t

91 / 96

Page 92: Les bases de git

Quand je code

• j’ajoute mes fichier modifies a l’index

g i t add

• je verifie mes modifications suivies

g i t s t a t u s

• je valide mes changements dans un commit

g i t commit

92 / 96

Page 93: Les bases de git

Partager mon travail

• je publie mon travail au moins en fin de journee

g i t push

• en cas de fast-forward, j’applique mes modifications apres cellesdes autres

g i t p u l l −−r e b a s e

• en cas de conflit, je fait les modications a la main

g i t m e r g e t o o lg i t r e b a s e −−c o n t i n u e

93 / 96

Page 94: Les bases de git

Au secours, rien ne va plus !

• faire attention a ce qu’on fait pour eviter les ennuis inutiles

• DON’T PANIC !

• prendre le temps de lire les messages d’erreur de git (ils donnentsouvent la solution)

• il existe de tres nombreuses ressources sur le net

94 / 96

Page 95: Les bases de git

Des questions ?Ne mourrons pas idiots.

95 / 96

Page 96: Les bases de git

Merci de votre participationet a une prochaine fois !

96 / 96