Вы находитесь на странице: 1из 29

Le systme de gestion de version Git et GitHub

Gnie Logiciel - MPRI

Lucca Hirschi
lucca.hirschi@lsv.ens-cachan.fr

d'aprs des slides de Nathan Grosshans

6 octobre 2016
Introduction
Systme de gestion de version
Systme logiciel permettant de maintenir et grer toutes les
versions d'un ensemble de chiers.

Pourquoi un systme de gestion de version ?


I Revenir aisment une version prcdente.

I Suivre l'volution du projet au cours du temps.

I Permettre le travail en parallle sur des parties disjointes du


projet et grer les modications concurrentes.

I Faciliter la dtection et la correction d'erreurs.

I ...

Ouvrage de rfrence
http://git-scm.com/book
Dirents types de systmes de gestion de version
Systme de gestion de version local

Avantages Inconvnients
I Gestion et utilisation trs I Est trs sensible aux pannes.

simples. I Ne permet pas la collaboration.


Dirents types de systmes de gestion de version
Systme de gestion de version centralis

Avantages Inconvnients
I Structurellement simple. I Est trs sensible aux pannes.

I Gestion et utilisation simples. I Inadapt aux trs grands projets


et/ou avec une forte structure
hirarchique.
Dirents types de systmes de gestion de version
Systme de gestion de version distribu

Avantages Inconvnients
I Moins sensible aux pannes. I Gestion et utilisation plus
compliques.
I Adapt aux trs grands projets
et/ou avec une forte structure I Peut devenir trs complexe

hirarchique. structurellement.
Git
Carte d'identit

Systme de gestion de version distribu (DVCS).

Bref historique (Wikipedia)


I De 1991 2002, le noyau Linux tait dvelopp sans utiliser de
systme de gestion de version.

I A partir de 2002, la communaut a commenc utiliser


BitKeeper, un DVCS propritaire.

I En 2005, suite un contentieux, BitKeeper retire la possibilit


d'utiliser gratuitement son produit. Linus Torvalds lance le
dveloppement de Git et aprs seulement quelques mois de
dveloppement, Git hberge le dveloppement du noyau Linux.
Git
Les principes de base

Un dpt Git est une sorte de systme de chiers (base de


donnes), enregistrant les versions de chiers d'un projet des
moments prcis au cours du temps sous forme d'instantans.

Comment fonctionne le processus de versionnement ?


Git
Les principes de base

3 sections d'un projet Git :

I Le rpertoire Git/dpt :
contient les mta-donnes et la
base de donnes des objets du
projet.

I Le rpertoire de travail :
extraction unique d'une version
du projet depuis la base de
donnes du dpt.

I La zone de transit/d'index :
simple chier contenant des
informations propos de ce qui
sera pris en compte lors de la
prochaine soumission.
Git
Les principes de base

4 tats d'un chier dans Git :

I non versionn : chier n'tant


pas ou plus gr par Git ;

I non modi : chier sauvegard


de manire sre dans sa version
courante dans la base de
donnes du dpt ;

I modi : chier ayant subi des


modications depuis la dernire
fois qu'il a t soumis ;

I index (staged) : idem, sauf qu'il


en sera pris un instantan dans
sa version courante lors de la
prochaine soumission (commit).
Git
Les principes de base

Chaque soumission (commit) donne lieu la cration d'un objet


commit contenant un pointeur vers un instantan du contenu
dont les modications taient indexes au moment de la soumission
(ensemble d'objets permettant de stocker un instantan des chiers
concerns d'une part et de reproduire la structure du rpertoire
projet et de ses sous-rpertoires d'autre part), quelques
mta-donnes (auteur, message) et un pointeur vers l'objet
commit prcdent.
Git
Les commandes de base

Initialiser un dpt
$ git init
Acher l'tat des chiers du rpertoire courant
$ git status
I Untracked les : chiers non versionns.

I Changes to be committed : modications (ajout, suppression,


changements) charges en zone de transit (staging area), ou
indexes.

I Changes not staged for commit : modications n'ayant pas t


charges en zone de transit (ou indexes).
Git
Les commandes de base

Indexer l'ajout ou les changements d'un chier


$ git add [-p] <fichier>
Annuler les modications indexes d'un chier
$ git reset <fichier>
Annuler les modications non encore indexes d'un chier
$ git checkout [--] <fichier>
Indexer la suppression d'un chier
$ git rm <fichier>
Dversionner un chier
$ git rm --cached <fichier>
Git
Les commandes de base

Acher le dtail des modications non indexes


$ git diff
Acher le dtail des modications indexes
$ git diff --staged
Soumettre les modications indexes en zone de transit
$ git commit
Voir l'historique des soumissions
$ git log
Git
Branches

Qu'est-ce qu'une branche dans un projet ?


C'est une ligne d'volution
divergent de la ligne
d'volution courante, celles-ci
se poursuivant
indpendemment l'une de
l'autre.

Pourquoi des branches ?


I Pouvoir se lancer dans des volutions ambitieuses en ayant
toujours la capacit de revenir une version stable que l'on
peut continuer maintenir indpendemment.

I Pouvoir tester direntes implmentations d'une mme


fonctionnalit de manire indpendante.
Git
Branches

Une branche dans Git est tout simplement un pointeur vers un objet
commit . Par dfaut, il en existe une seule, nomme master.

Crer une nouvelle branche


$ git branch <branche>

HEAD est un pointeur spcial vers la


branche sur laquelle on travaille
actuellement (extraite dans le
rpertoire de travail).
Git
Branches

Voir les branches du dpt local


$ git branch
Supprimer une branche
$ git branch -d <branche>
Passer une branche donne (mise jour de l'index et du
rpertoire de travail, ainsi que du pointeur HEAD)
$ git checkout <branche>
Git
Branches

Deux faons pour incorporer les modications d'une branche dans


la branche courante.

Fusionner (merge) Rebaser (rebase)


Git
Branches

Fusionner les modications d'une branche donne dans la


branche courante (HEAD)
$ git merge <branche>
I Si l'objet commit point par <branche> est dj un anctre
de l'objet commit courant (HEAD), alors rien n'est fait.

I Si l'objet commit point par <branche> est un descendant


de l'objet commit courant, seul le pointeur de la branche
courante est dplac sur l'objet commit concern par la
fusion (fast-forward ).
Git
Branches

I Autrement, Git se base sur trois instantans dirents, celui de


l'objet commit courant, celui de l'objet commit point par
<branche> et celui de l'objet commit correspondant au plus
jeune anctre commun des deux premiers objets commit,
pour crer un nouvel instantan associ un nouvel objet
commit par la fusion de deux branches, sur lequel la branche
courante pointera prsent.
Git
Branches

En cas de conit empchant la fusion


I Aucun objet commit de fusion n'est cr, mais le processus
est mis en pause.

I git status donne les chiers n'ayant pas pu tre fusionns


(lists en tant que unmerged).

I Git ajoute des marqueurs de rsolution de conits tout chier


sujet conits an que ceux-ci puissent tre rsolus la main.

I Pour marquer les conits dans un chier <fichier> comme


rsolus, il faut faire git add <fichier>. On peut, aprs
rsolution de tous les conits, soumettre les modications sous
forme d'objet commit de fusion avec git commit et
terminer ainsi le processus de fusion.
Git
Branches

Rebaser les modications de la branche courante (HEAD) sur


une branche donne
$ git rebase <branche>
I Aller l'objet commit correspondant au plus jeune anctre
commun des deux objets commit points par la branche
courante et <branche>.
I Obtenir et sauvegarder les changements introduits depuis ce
point par chaque objet commit de la branche courante.

I Faire pointer la branche courante sur le mme objet commit


que <branche> et rappliquer tous les changements un par un.
Git
Travail avec des dpts distants

Pour collaborer, il est ncessaire de communiquer et d'changer


avec un ou plusieurs dpts distants hbergeant le mme projet
(typiquement des dpts publics associs une personne, une
quipe ou tout le projet).

Les donnes des dpts distants (objets commit et instantans)


sont entirement copies dans le dpt local, et pour chaque
branche <branche> d'un dpt distant <dpt> est maintenue une
branche locale <dpt>/<branche> non modiable, permettant de
suivre la position de <branche> sur <dpt> localement.

Acher la liste de tous les dpts distants du projet


$ git remote
Git
Travail avec des dpts distants

Cloner un dpt distant (automatiquement nomm origin)


$ git clone <URL> [<rpertoire>]
Git
Travail avec des dpts distants

Rcuprer les modications d'un dpt distant


$ git fetch <dpt>
Git
Travail avec des dpts distants

Ajouter un dpt distant


$ git remote add <nom> <URL>
Git
Travail avec des dpts distants

Mettre jour un dpt distant donn pour une certaine


branche locale
$ git push <dpt> <branche>
Attention : ceci fonctionne uniquement si le dernier objet commit
de la branche concerne du dpt distant a t rcupr et intgr
dans la branche en question du dpt local, en d'autres termes si la
mise jour de la branche du dpt distant peut tre faite par
fast-forward.

Combiner git fetch et git merge


git pull <dpt> <branche>
Combiner git fetch et git rebase
git pull --rebase <dpt> <branche>
Git
Conseils, bonnes pratiques

Conseils
I User et abuser des branches.

I Eviter de systmatiquement faire un git pull, mais rchir


ce qu'il est le plus pertinent de faire (fusionner ou rebaser).

Bonnes pratiques
I Ne jamais rebaser une branche dj prsente sur un dpt
public.

I Respecter les conventions de formattage du message de


soumission : titre de 50 caractres au plus, suivi d'une ligne
vide puis d'une description dtaille avec des lignes de 72
caractres au plus, le tout au prsent de l'impratif
(http://tbaggery.com/2008/04/19/
a-note-about-git-commit-messages.html).
GitHub

I Service web d'hbergement et de gestion de projets de


dveloppement logiciel utilisant le systme de gestion de
version Git.
I En plus de ce systme, on trouvera tout un co-systme
incluant notamment un Wiki et un systme de tickets (avec
MarkDown et rfrencement des tickets).
I https://help.github.com/
Fin

Des questions ?

Вам также может понравиться