5 Introgit

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 27

Ss 1 0 0 0 0:02.25 02-12:03:27 0.0 0.

0 552 600820 0 0 /sbin/launchd


Ss 10 1 0 0 0:01.45 02-12:03:26 0.0 0.1 1268 75968 0 0 /usr/libexec/kextd
Ss 11 1 0 0 0:05.31 02-12:03:26 0.0 0.0 472 600236 0 0 /usr/sbin/notifyd
Ss 12 1 0 0 0:01.93 02-12:03:25 0.0 0.0 468 601332 0 0 /usr/sbin/syslogd
Ss 14 1 0 0 2:21.66 02-12:03:21 0.0 0.0 280 599620 0 0 /usr/sbin/update
Ss 17 1 0 0 0:02.11 02-12:03:21 0.0 0.1 2504 77236 0 0 /usr/sbin/securityd -i
Ss 19 1 0 0 3:08.08 02-12:03:21 0.0 4.6 96432 242840 0 0 /System/Library/Frameworks/Cor
Ss 20 1 65 65 0:01.42 02-12:03:21 0.0 0.1 1208 77304 0 0 /usr/sbin/mDNSResponder -launc
Ss 21 1 501 20 1:04.47 02-12:03:21 0.0 0.4 8860 458452 0 0 /System/Library/CoreServices/l
Ss 22 1 0 0 0:00.02 02-12:03:21 0.0 0.0 692 75448 0 0 /usr/sbin/KernelEventAgent
Ss 24 1 0 0 14:10.13 02-12:03:21 0.0 0.1 1564 77040 0 0 /usr/libexec/hidd

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

L2 Atelier de l'informaticien  S3 2014/2015


S 89 63 501 20 0:01.13 02-12:03:06 0.0 0.2 3460 388180 0 0 /System/Library/CoreServices/A
S 93 63 501 20 0:10.99 02-12:03:06 0.0 1.1 22508 545084 0 0 /System/Library/CoreServices/S
S 94 63 501 20 0:00.60 02-12:03:06 0.0 0.1 2248 341124 0 0 /usr/sbin/UserEventAgent -l Aq
S 95 63 501 20 2:43.91 02-12:03:06 0.0 0.8 17644 140084 0 0 /System/Library/Frameworks/App
S 96 63 501 20 1:21.05 02-12:03:06 0.0 0.7 14268 454280 0 0 /System/Library/CoreServices/D
S 97 63 501 20 0:00.00 02-12:03:05 0.0 0.0 584 76432 0 0 /usr/sbin/pboard
S 98 63 501 20 1:28.90 02-12:03:05 0.0 0.5 10916 427788 0 0 /System/Library/CoreServices/S
Ss 99 1 0 0 72:57.85 02-12:03:05 5.5 0.6 11788 91476 0 0 /usr/sbin/coreaudiod
S 100 63 501 20 0:56.37 02-12:03:05 0.0 1.7 35724 507888 0 0 /System/Library/CoreServices/F
S 105 63 501 20 0:00.89 02-12:03:03 0.0 0.1 2492 355388 0 0 /Applications/iTunes.app/Conte
Ss 106 1 -2 -2 0:00.01 02-12:03:02 0.0 0.0 696 76776 0 0 /System/Library/PrivateFramewo
S 127 63 501 20 0:00.01 02-12:02:47 0.0 0.0 880 76392 0 0 /usr/libexec/ApplicationFirewa
S 143 63 501 20 1:28.16 02-12:01:39 0.0 0.3 6508 92080 0 0 /System/Library/Services/Apple
S 176 63 501 20 0:04.15 02-11:55:54 0.0 0.1 1360 76704 0 0 /usr/bin/ssh-agent -l
S 473 96 501 20 0:14.56 02-09:17:41 0.0 1.2 24456 509004 0 0 /System/Library/CoreServices/D
S 1398 63 501 20 0:14.50 02-03:03:52 0.0 1.1 23032 437672 0 0 /Applications/iCal.app/Content
S 1577 63 501 20 0:04.46 02-01:54:48 0.0 0.4 7720 421456 0 0 /Applications/Stickies.app/Con
S 7480 63 501 20 2:14.18 01-10:22:55 2.7 0.8 17788 434608 0 0 /Applications/Utilities/Termin
SNs 10477 1 501 20 1:23.57 01-02:01:59 0.0 1.0 20668 157152 0 17 /System/Library/Frameworks/Cor
Une petite histoire de
programmeur...

• Depuis 6 mois, Pierre travaille sur un logiciel de


statistiques
• La semaine dernière dernière, il a modié le code d'une
fonction complexe
• Il vient de s'apercevoir que c'était une erreur car elle ne
fonctionne plus
• il aimerait revenir en arrière...

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...

• Enfer et damnation, mon dur a crashé!


• C'est pas grave, tu as plein de zips de ton code, tu en fais
un chaque soir.
• Oui, mais ils étaient tous sur mon disuque dur :-o...

6/27
Conclusion ?

7/27
Le début d'une autre histoire...

• Voilà, vous allez faire un nouveau projet à 25. A vous de


vous organiser...

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.

$ diff hello.c bye.c


0a1,2
> #include <stdio.h>
>
3c5
< printf("Hello world!\n");
---
> printf("Goodbye love!\n");

Elle existe en plusieurs parfums : unié (-u), contextuel (-c). 10/27


Au début était di. . .
La commande diff compare deux chiers ligne à ligne.
$ diff -c hello.c bye.c
*** hello.c 2012-09-27 13:21:34.000000000 +0200
--- bye.c 2012-09-27 16:28:11.000000000 +0200
***************
*** 1,4 ****
void main()
{
! printf("Hello world!\n");
}
--- 1,6 ----
+ #include <stdio.h>
+
void main()
{
! printf("Goodbye love!\n");
}

Elle existe en plusieurs parfums : unié (-u), contextuel (-c). 11/27


Au début était di. . .
La commande diff compare deux chiers ligne à ligne.
$ diff -u hello.c bye.c
--- hello.c 2012-09-27 13:21:34.000000000 +0200
+++ bye.c 2012-09-27 16:28:11.000000000 +0200
@@ -1,4 +1,6 @@
+#include <stdio.h>
+
void main()
{
- printf("Hello world!\n");
+ printf("Goodbye love!\n");
}

Elle existe en plusieurs parfums : unié (-u), contextuel (-c). 12/27


. . .et son inséparable patch
La commande patch applique une collection engendrée par
diff .
Devine seule le type de patch présenté (contextuel, unié, etc).
Robuste aux divergences dans les numéros de ligne.
L'option -p permet de supprimer des répertoires en préxe.
Démonstration

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

Les premiers systèmes de gestion de versions (SCCS, RCS)


permettaient uniquement une gestion de version sur le système
de chier local.
Le dépôt était simplement constitué de la version originelle de
chaque chier et de la suite des patchs correspondant aux
versions successives.

16/27
Systèmes centralisés

Le dépôt est situé sur un serveur central commun.


L'utilisateur ne dispose essentiellement que de sa copie de
travail.
CVS en est le représentant historique.
Subversion est une solution moderne très populaire.

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/

Les gures suivantes sont de Mark Lodato, extraites de A Visual Git


Reference, sous licence Creative Commons BY-NC-SA-3.0.

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

Un dépôt vide se crée dans un répertoire avec git init


Un dépôt se clone avec la commande git clone :
$ git clone https://github.com/nopid/atelier.git

21/27
Conventions
reference to current branch
another branch
child points to parent HEAD
current branch
maint master

··· a47c3 b325c c10b9 da985 ed489

files to go in next commit


commit objects,
Stage (Index)
identified by SHA-1 hash
files that you “see”
Working Directory

22/27
Premier contact (1/2)

History

git reset -- files git commit

Stage (Index)

git checkout -- files git add files

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

··· a47c3 b325c c10b9 da985 ed489 f0cec

Stage (Index)

Working Directory

25/27
Di

HEAD
maint git diff da985 b325c master

··· a47c3 b325c c10b9 da985 ed489

git diff --cached

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

You might also like