Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Présentation GIT

No description
by

Stéphane Bachelet

on 30 June 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Présentation GIT

ATELIER
Stéphane Bachelet
NEXEO - 26/06/2014
Agenda
1. Introduction
3. Commandes de base
4. Les branches
5. Exemple de workflow
6. Questions
Introduction
Qu'est-ce que la gestion de configuration ?
VCS
:
V
ersion
C
ontrol
S
ystem


Enregistrement / Récupération des différentes versions d'un fichier


Identification de l'auteur d'une modification


Raison de la modification (lien avec un gestionnaire de tickets)
Introduction
Qu'est-ce que la gestion de configuration ?
1 - Le système local
Principe :
base de données locale
exemple : RCS (1982)

Avantages :
simple
facile à mettre en œuvre

Inconvénients :
données fragiles

Introduction
Qu'est-ce que la gestion de configuration ?
2 - Le système centralisé (CVCS)
Principe :
base de données hébergée sur un serveur distant
exemple : CVS, Subversion, Clearcase, etc.

Avantages :
bonne vision parallèle
gestion fine des droits

Inconvénients :
serveur HS => aucun travail
nécessite une bonne sauvegarde


[Centralized Version Control System]
Introduction
Qu'est-ce que la gestion de configuration ?
3 - Le système distribué (DVCS)
Principe :
chaque clone est une copie complète du système
exemples : Git, Mercurial

Avantages :
cf. inconvénients CVS et CVCS
possibilité de travailler en étant déconnecté

Inconvénients :
nécessite d'avoir une bonne organisation pour les gros projets

[Distributed Version Control System]
2. Pourquoi Git ? / Concepts
Pourquoi git ? / Concepts
Un peu d'histoire...
2002
: Linux choisit BitKeeper pour effectuer la gestion des sources du noyau Linux.

Logiciel propriétaire gratuit pour les projets open source
Avec la version gratuite, il n'était pas possible de comparer les fichiers entre eux

2005
: détérioration des relations entre BitKeeper et la communauté Linux

La gratuité est révoquée

2005
: Linus Torvalds décide de créer son propre VCS
Pourquoi git ? / Concepts
Cahier des charges
But :
que l'ensemble de la communauté développant le noyau Linux utilise ce nouveau VCS


Postulats de départ :

Vitesse

Conception simple

Possibilité d'héberger des développements parallèles

Outil totalement distribué

Capable de gérer des projets d'envergure (Linux !)
Pourquoi git ? / Concepts
Concepts de base - 1 / 4
De nombreux VCS stockent une liste de modifications survenues sur les différents fichiers.

CVS, Subversion, Perforce, etc.
Pourquoi git ? / Concepts
Concepts de base - 2 / 4
Git gère des instantanés => mini système de fichiers

Enregister une modification dans git, c'est prendre une photo de l'intégralité de l'espace de travail

Si aucune modification => pointeur vers dernière version
efficacité
Pourquoi git ? / Concepts
Concepts de base - 3 / 4
> La majorité des opérations sont locales

Rapidité
Exemple : lecture de l'historique, comparaison de fichiers

> Git gère l'intégrité

Pour tout objet, Git calcule une signature unique en SHA-1

exemple : ca82a6dff817ec66f44342007202690a93763949

Impossible de modifier un objet sans que Git le remarque
Garantie pour les transferts de fichiers

> Git ajoute et ne supprime que rarement

Quasi impossible de perdre des données enregistrées dans un dépôt.

Pourquoi git ? / Concepts
Concepts de base - 4 / 4
Les quatre états !
Les commandes de bases
Création d'un dépôt
> Sélectionner le répertoire qui sera la racine du dépôt et s'y placer

> Une commande est nécessaire :

$ git init

> Création d'un sous répertoire, squelette du dépôt :

.git

> Aucun fichier du répertoire n'est encore géré par Git. Ils sont tous dans le statut
"Untracked"
Les commandes de bases
Récupération d'un dépôt distant
> Avoir le chemin ou l'URL où se trouve le répertoire .git et se placer dans le répertoire destination

> Une commande est nécessaire :

$ git clone user@URL/.git nom_destination

ou

$ git clone répertoire/.git nom_destination

> Création d'un sous répertoire, image exacte du dépôt distant au moment du clone

Les commandes de bases
Enregistrer des modifications 1 / 3
> Objectif : faire transiter les fichiers d'un état à un autre pour créer un commit

> Pour identifier l'état de chaque fichier :

$ git status
Les commandes de bases
Enregistrer des modifications 2 / 3
> Exemple :

$ git status
# On branch master
#
Changes to be commited:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: main.cc
#
#
Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
#
# modified: main.h
#
#
Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# fichier.cc
# fichier.h
Les commandes de bases
Enregistrer des modifications 3 / 3
> Ajout d'un fichier au prochain commit :

$ git add main.h fichier.cc fichier.h

> Ré-initialisation des modifications d'un fichier :

$ git checkout -- main.cc

> Suppression d'un fichier :

$ git rm main.cc
(Ceci supprimera physiquement le fichier)
$ git rm --cached main.cc
(le fichier reste présent)

> Déplacer des fichiers :

$ git mv main.cc nouveau_repertoire/main.cc

> Ignorer des fichiers via un fichier
.gitignore

> Réalisation du commit :

$ git commit -m "Commentaire associé au commit"
Les commandes de bases
Visualiser des modifications 1 / 2
> Utilisation de la commande
git log


$ git log

commit ca82a6dff817ec66f44342007202690a93763949
Author: Stephane bachelet <stephane.bachelet@nexeo.fr>
Date: Mon Mar 17 21:52:11 2014 -0700

Correction bug pricing

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Stephane bachelet <stephane.bachelet@nexeo.fr>
Date: Sat Mar 15 16:40:33 2014 -0700

Amelioration module surveillance

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Stephane bachelet <stephane.bachelet@nexeo.fr>
Date: Sat Mar 15 10:31:28 2014 -0700

Premier commit
> Nombreuses options disponibles

Permet de sélectionner les informations importantes pour l'utilisateur

Les commandes de bases
Visualiser des modifications 2 / 2
> Affichage des commits et du commentaire associé :
$ git log --pretty=oneline

ca82a6dff817ec66f44342007202690a93763949
Correction bug pricing
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Amelioration module de surveillance
a11bef06a3f659402fe7563abf99ad00de2209e6
Premier commit
> Affichage plus complexe :
$ git log --pretty=format:"%h - %an, %ar : %s"

ca82a6d
-
Stephane Bachelet
,
3 months ago
:
Correction bug pricing
085bb3b
-
Stephane Bachelet
,
2 months ago
:
Amelioration module de surveillance
a11bef0
-
Stephane Bachelet
,
1 months ago
:
Premier commit

%h : format abrégé du numéro de commit
%an : Nom de l'auteur
%ar : Date relative du commit
%s : Commentaire du commit

Les commandes de bases
Interaction avec les dépôts distants
> Lister les dépôts distants :
$ git remote -v

origin git@nom_machine:/home/git/Projet_X/Projet_X.git (fetch)
origin git@nom_machine:/home/git/Projet_X/Projet_X.git (push)
SBA /home/sbachelet/GIT/Projet_X.git (fetch)
SBA /home/sbachelet/GIT/Projet_X.git (push)
> Possibilité d'ajouter ou supprimer des références :
$ git remote add nom_référence URL

$ git remote rename ancien_nom nouveau_nom

$ git remote rm nom_référence
$ git fetch nom_depôt
> Récupérer les objets d'un dépôt distant :
> Pousser des objets vers un dépôt distant :
$ git push nom_dépôt branche
Les commandes de bases
Gestion des tags
> Lister les tags
$ git tag

v1.0
v1.1
v1.1.1
v1.1.2
v1.2
> Créer un tag :
$ git tag -a v1.2.1 -m "Commentaire associé au tag"
> Deux types principaux de tag :

tag léger : pointeur vers un commit spécifique
tag annoté : objet à part entière (auteur, commentaire, somme de contrôle
> Permet d'accéder à un instant T du dépôt
Les branches
Rappel et Définition
> Un commit est un instantané du file system

> Il possède un numéro de contrôle (en SHA-1), un auteur et un pointeur vers le commit qui le précède
> Une branche est simplement un pointeur vers l'un des ces commits
Les branches
Généralités 1 / 4
> Par défaut, un dépôt Git possède une branche appelée
"master"

> Créer une branche, c'est ajouter un pointeur que l'on peut déplacer. A sa création, il sera placé sur le commit courant.

> Exemple :

$ git branch testing
Les branches
Généralités 2 / 4
>
HEAD
: fichier, maintenu par Git, indiquant la branche courante

> Pour changer de branche :

$ git checkout testing
Les branches
Généralités 3 / 4
> Si on ajoute un commit à la branche "testing", il n'appartiendra qu'à elle :
> Changer de branche, signifie donc modifier le file system !
Les branches
Fusion de branches 1 / 6
> Prenons l'exemple ci-dessous :
Les branches
Fusion de branches 2 / 6
> Pour fusionner "
master
" et "
hotfix
", il faut exécuter les commandes suivantes :

$ git checkout master
$ git merge hotfix
Les branches
Fusion de branches 3 / 6
> Pour fusionner "
master
" et "
iss53
", le protocole est identique mais pas le résultat :

$ git checkout master
$ git merge iss53
> Création d'un nouveau commit : fusion de C4 et C5 !
Les branches
Fusion de branches 4 / 6
> Si un conflit apparaît, Git vous en informe :

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

$ git status
index.html: needs merge
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# unmerged: index.html
#
Les branches
Fusion de branches 5 / 6
> Voici à quoi ressemble un conflit :

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

> Une fois le conflit résolu et le fichier enregistré :

$ git add index.html
$ git commit
Les branches
Généralités 4 / 4
> Visualisation des branches d'un dépôt :

$ git branch
iss53
* master
testing

> Visualisation des branches non fusionnées avec master :

$ git branch --no-merged
* master
testing
On peut voir l'inverse avec l'option
--merged

> Suppression d'une branche :

$ git branch -d nom_branche
On utilisera l'option -D si la branche n'a pas été fusionnée avec la branche master
Les branches
Fusion de branches 6 / 6
Attention ! Warning ! Achtung !
Les branches
Branches distantes
> Instancier une branche du dépôt distant :

$ git checkout -b origin/test test

> Pour récupérer les modifications d'une branche distante :

$ git checkout test
$ git fetch origin
$ git pull origin test

> Pour pousser test vers le dépôt distant :

$ git push origin test

> Supprimer une branche distante :

$ git push origin :test
Les branches
Le rebasage
> Merge

$ git checkout master
$ git merge experiment
> Rebasage

$ git checkout experiment
$ git rebase master
Full transcript