Professional Documents
Culture Documents
5 Introgit
5 Introgit
5 Introgit
Gestion de versions
Ss 25 1 0 0 0:29.84 02-12:03:21 0.0 0.1 1616 82464 0 0 /System/Library/Frameworks/Cor
Ss 27 1 0 0 0:00.01 02-12:03:21 0.0 0.0 700 75376 0 0 /sbin/dynamic_pager -F /privat
Ss 30 1 0 0 0:02.78 02-12:03:21 0.0 0.0 1016 75460 0 0 /usr/sbin/diskarbitrationd
Ss 31 1 0 0 0:25.24 02-12:03:21 0.0 0.2 4028 78660 0 0 /usr/sbin/DirectoryService
Ss 33 1 0 0 0:25.19 02-12:03:21 0.0 0.1 2148 77076 0 0 /usr/sbin/configd
Ss 36 1 0 0 0:00.08 02-12:03:21 0.0 0.0 672 75388 0 0 autofsd
Ss 38 1 0 0 0:53.43 02-12:03:21 0.0 0.1 2400 75712 0 0 /usr/libexec/ApplicationFirewa
Ss 40 1 1 1 0:13.06 02-12:03:21 0.0 0.0 792 75356 0 0 /usr/sbin/distnoted
Ss 43 1 0 0 0:21.15 02-12:03:21 0.0 1.3 26988 115932 0 0 /System/Library/CoreServices/c
Ss 44 Matthieu
1 0 Exbrayat
0 (+N.
0:00.12 02-12:03:21 Ollinger),
0.0 0.1 1928 Université
86716 d'Orléans
0 0 /usr/sbin/blued
Ss 49 1 88 88 83:45.31 02-12:03:21 2.2 3.7 77604 469720 0 0 /System/Library/Frameworks/App
Ss 63 1 501 20 0:03.57 02-12:03:19 0.0 0.0 540 599796 0 0 /sbin/launchd
Ss 78 1 0 0 8:59.69 02-12:03:09 0.1 0.2 3292 96128 0 0 /System/Library/PrivateFramewo
Ss 82 1 0 0 0:07.69 02-12:03:08 0.0 0.1 1068 75400 0 0 /System/Library/PrivateFramewo
2/27
Une deuxième histoire de
programmeur...
• Pierre ne s'y laissera plus prendre
• Chaque soir il fait un zip de son projet
• Etienne passe le voir :
I Tu te souviens que tu as changé l'interface d'achage
des probabilités ?
I Heu... oui.. ça remonte à quelques semaines...
I Tu pourrais me retrouver la dernière version avant l'ajout
des couleurs ?
I Je vais chercher...
• et c'est parti pour une longue séance de fouilles
archéologiques...
3/27
Une troisième histoire de
programmeur...
• Pierre et Etienne ne se sont pas vu depuis deux semaines
• Ce soir, Etienne vient voir Pierre avec une clé USB
I J'ai trouvé un bug dans la lecture de chier de données,
je l'ai corrigé, voilà le nouveau code
I Maiiiiis... j'ai ajouté la gestion des chiers CSV entre
temps...
I Ah... mais t'as pas modié le chier readMyFile.java ?
I Ben si, justement
I Bon. Fais voir ce que tu as changé
• et c'est reparti pour une longue soirée!
4/27
Une variante...
• La semaine dernière, Pierre a demandé à Etienne de
travailler sur le calcul de la distribution de Poisson
• Pierre, lui, n'a pas touché au code depuis
• Ce matin, il souhaite reprendre le développement, mais...
il ne reconnait plus le code!
I Etienne, y a eu une panne ?
I Non, je ne crois pas, j'ai même pu travailler sur le code...
I Mais... tu as aussi changé les classes sur lesquelles je
travaillais ? !
I Ha ben oui, sinon, ma distribution n'était pas bonne :-D
I Le problème, c'est que maintenant je ne retrouve plus le
bug sur lequel je travaillais.
I Ah, heu peut-être est-il corrigé ?...
I Croisons les doigts...
5/27
Une histoire courte de
programmeur...
6/27
Conclusion ?
7/27
Le début d'une autre histoire...
8/27
Problématique
Les systèmes de gestion de versions visent à :
• permettre un partage ecace du code source entre
plusieurs développeurs ;
• conserver l'historique des changements apportés au
code tout en permettant de les annuler ;
• résoudre les conits de mise en commun des
modications.
L'utilité de ces outils dépasse le simple cadre du
développement collectif de logiciels de grosse taille.
9/27
Au début était di. . .
La commande diff compare deux chiers ligne à ligne.
13/27
Pour les cas dicile il y avait
di3 !
La commande diff3 permet de fusionner deux chiers dont
on connaît un ancêtre commun.
% diff3 -m helloA.c helloO.c helloB.c
<<<<<<< helloA.c
#include <stdio.h>
void main()
||||||| helloO.c
void main()
=======
int main(int argc, char *argv[])
>>>>>>> helloB.c
{
<<<<<<< helloA.c
printf("Goodbye love!\n");
||||||| helloO.c
printf("Hello world!\n");
=======
printf("Hello world!\n");
return 0; 14/27
Système de gestion de versions
Un système de gestion de versions est constitué d'une
base de donnée, appelée dépôt, qui stocke les versions
successives de chacun des chiers sous son contrôle.
Chaque utilisateur dispose d'une copie locale d'une des
versions de l'ensemble des chiers sur laquelle il peut travailler.
L'utilisateur peut soumettre ses modications pour qu'elles
soient ajoutées au dépôt en tant que nouvelle version.
Le système apporte des mécanisme pour prendre en compte les
conits de modication.
15/27
Aux temps anciens
16/27
Systèmes centralisés
17/27
Systèmes distribués
L'incarnation moderne des systèmes de gestion de versions est
distribuée.
Chaque utilisateur dispose de sa copie complète du dépôt.
N'importe quels utilisateurs consentants peuvent échanger les
modications et nouvelles versions de leurs dépôts.
Git développé par Linus Torvalds pour le noyau Linux est très
populaire.
Mercurial est une alternative libre aussi très répandue.
18/27
Git
Site ociel : http://git-scm.com/
Documentation Git Book : http://git-scm.com/book/fr
Documentation A Visual Git Reference :
http://marklodato.github.com/visual-git-guide/
19/27
Que souhaitons-nous faire ?
• avoir un endroit (dépôt) pour déposer les versions de
notre code
→ créer un nouveau dépôt, ou
→ se connecter à un dépôt existant
• sauver des versions du code
• retrouver d'ancienne versions
• travailler à plusieurs versions sans qu'elles interfèrent
• les fusionner le moment venu
• fusionner le travail de plusieurs personnes
20/27
Création d'un dépôt
21/27
Conventions
reference to current branch
another branch
child points to parent HEAD
current branch
maint master
22/27
Premier contact (1/2)
History
Stage (Index)
Working Directory
23/27
Premier contact (2/2)
History
git checkout HEAD -- files Stage (Index) git commit (files —-a)
Working Directory
24/27
Commit simple
git commit
HEAD HEAD
maint master master
Stage (Index)
Working Directory
25/27
Di
HEAD
maint git diff da985 b325c master
Stage (Index)
git diff maint git diff HEAD
git diff
Working Directory
26/27
Pense-bête
git init création de dépôt
git help aide
git clone /chemin/dépôt copie un dépôt
git pull mise à jour du dépôt
git add mon_fichier ajout de chiers
git rm mon_fichier suppression de chiers
git commit -m message soumettre une version
git branch ma_branche créer une branche
git merge autre_branche fusionner des branches
git status état courant de la copie
git log visualiser le journal
git diff comparer des versions
27/27