0% ont trouvé ce document utile (0 vote)
19 vues35 pages

Code Versioning Avec GIT

Le document présente les objectifs et le fonctionnement de la gestion de sources avec Git, un système de versionnage créé par Linus Torvalds. Il explique les concepts clés tels que les commits, les branches, et la staging area, ainsi que les commandes essentielles pour l'installation, la configuration et l'utilisation de Git. Enfin, il aborde le workflow typique de gestion de versions et les opérations de base pour manipuler les fichiers et les modifications dans un projet.

Transféré par

ayadi ghaya
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
19 vues35 pages

Code Versioning Avec GIT

Le document présente les objectifs et le fonctionnement de la gestion de sources avec Git, un système de versionnage créé par Linus Torvalds. Il explique les concepts clés tels que les commits, les branches, et la staging area, ainsi que les commandes essentielles pour l'installation, la configuration et l'utilisation de Git. Enfin, il aborde le workflow typique de gestion de versions et les opérations de base pour manipuler les fichiers et les modifications dans un projet.

Transféré par

ayadi ghaya
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Code Versioning avec

GIT
Les objectifs de la gestion de sources

• Gérer les activités de lecture, écriture et fusion sur les sources du projet.
• Conserver un historique des modifications apportées aux sources:
• Par qui, quand, quoi ?
• Permettre de revenir en arrière en cas de besoin.
• Permettre de travailler en équipe sur les mêmes sources d'un projet.
• Gérer les accès concurrents.
• Gérer les conflits.
• Permettre de travailler simultanément sur plusieurs versions d’un logiciel.

20
Les objectifs de la gestion de sources

• Permet de retrouver un fichier source supprimé.


• Fonctionne avec tout type de fichier (.txt, .php, .java, .jpg, .exe, …).
• Garantir la sécurité de la configuration du logiciel:
• Autorisation.
• Confidentialité.
• Intégrité.
• Disponibilité.

21
Les gestionnaires de sources : Git

• Créé en 2005 par Linus Torvalds pour la gestion des sources du noyau Linux.
• Logiciel libre.
• Multi-plateforme (linux, windows, MacOS, ...).
• Documentations très riches, forums actifs.
• Implémente des protocoles réseaux sécurisés (HTTPS) .
• Interfaces graphiques.
• Intégré dans plusieurs IDE tel que Eclipse.

22
Gestion de sources avec Git:
Le fonctionnement de base
• Git stocke pour chaque état du projet un instantané de tous les fichiers.
• Un fichier non modifié depuis le dernier état est stocké comme un pointeur vers sa version
précédente.
• La plupart des opération de Git ne nécessitent que des fichiers et des ressources locaux.
Pour la quasi-totalité de ces opérations, aucun appel réseau n’est nécessaire.
• Une somme de contrôle (checksum) vérifie chaque état par une empreinte SHA-1 et
permet ainsi d’assurer l’intégrité des données.
• Toutes les corruptions de fichier ou erreurs de transfert sont détectables.
• Somme de contrôle: 80f2a4d12d5cc8cefeeaf9f0e015f2d11ae43b35
• La réversibilité des opérations est assurée avec Git.

23
Gestion de sources avec Git:
Définitions
• Repository : ensemble des commits du projet (et les branches, les tags (ou libellés), ...)
• Working copy (ou copie de travail) : contient les modifications en cours (c’est le répertoire
courant)
• Staging area (ou index) : liste des modifications effectuées dans la working copy qu’on
veut inclure dans le prochain commit
• Commit : ensemble cohérent de modifications

24
Gestion de sources avec Git:
Le fonctionnement de base
• Un projet est composés de 3 fichiers A, B et C.
• Le commit initial permet de checkiner les fichiers A, B et C. Il s’agit de la première version du
projet.
• Les fichiers A et C sont modifiés et les changements sont checkinés. Les versions A1 et C1
sont alors créées. Il s’agit de la deuxième version du projet.
• Git a alors créé un instantané du projet composé des fichiers qui ont été modifiés, A et C. Les
fichiers qui n’ont pas subit de modification ne sont pas stockés, B.

25
Gestion de sources avec Git : Vocabulaire Git

• Staging - Ajout à l’index: insérer les changements dans l’index Git afin d’indiquer qu’ils
devront être versionnés.
• Commit: consigner les changements dans le dépôt Git local.
• Reset: annuler de manière irréversible des changements effectués.
• Push: envoyer les nouvelles modifications (commits) vers le dépôt distant.
• Pull: récupérer des nouveaux commits depuis le dépôt distant et mettre à jour l’espace de
travail.
• Fetch: récupérer des nouveaux commits depuis le dépôt distant.

26
Gestion de sources avec Git : Vocabulaire Git

• Merge: créer un nouveau commit ayant pour parents 2 branches fusionnées.


• Rebase: déplacer une suite de commits et la référence associée vers un nouvel
emplacement.
• Cherry pick: récupérer les modifications apportées par un ou plusieurs commits et les
réappliquer à un nouvel emplacement.
• Stash: mettre de coté le travail en cours avant de changer de branche.
• Branche: référence évoluant lors d’un commit.
• Etiquette: référence fixes permettant d’identifier facilement un commit particulier.

27
Git : Installation et
Configuration
Installation et Configuration

• Sous Linux : via le gestionnaire de paquet (ex: apt-get install git)


• Sous OSX : via homebrew (brew install git)
• Sous Windows : via msysgit ([Link]

29
Installation et Configuration

Configuration:
• La configuration globale de Git est située dans ~/.gitconfig
• La configuration propre à chaque repository Git est située dans <repository>/.git/config
• A minima, il faut configurer son nom d’utilisateur et son adresse email (informations qui
apparaîtront dans chaque commit) :
○ git config --global [Link] "John Doe"
○ git config --global [Link] johndoe@[Link]

30
Les commandes
git init

• La commande git init crée un dépôt Git.


• Elle permet de convertir un projet existant, sans version en un dépôt Git ou d'initialiser
un nouveau dépôt vide.
• La plupart des autres commandes Git ne sont pas disponibles hors d'un dépôt
initialisé.
• Il s'agit donc généralement de la première commande que vous exécuterez dans un
nouveau projet.

32
git init

Repository (dépôt)
• C’est l’endroit où Git va stocker tous ses objets : versions, branches, tags…
• Situé dans le sous-répertoire .git de l’emplacement ou on a initialisé le dépôt
• Organisé comme un filesystem versionné, contenant l’ intégralité des fichiers de
chaque version (ou commit)

33
git init --bare

• Le flag --bare crée un dépôt qui ne dispose pas de répertoire de travail, rendant
impossibles les éditions de fichiers et les commits de changements dans ce répertoire.
• Vous créeriez un dépôt brut depuis lequel exécuter les commandes git push et git
pull, mais dans lequel vous ne pourriez jamais faire de commit.

34
git config

• Le cas d'usage le plus élémentaire pour git config consiste à l'appeler avec un nom de
configuration, qui affichera la valeur définie pour ce nom.
• Les noms de configuration sont des chaînes délimitées par des points et composées
d'une « section » et d'une « clé » en fonction de leur hiérarchie.
• Par exemple : [Link]
• Dans cet exemple, « email » est une propriété enfant du bloc de configuration de
l'utilisateur.
• Cela renvoie l'adresse e-mail configurée, le cas échéant, que Git associera à des commits
créés en local.

35
git config : Niveaux de configuration

• La commande git config peut accepter des arguments de manière à spécifier le niveau de
configuration sur lequel agir.
• Les niveaux de configuration suivants sont disponibles :
• --local
• --global
• --system

36
Commit

• Fonctionnellement : Unité d’œuvre


• Doit compiler
• Doit fonctionner
• Doit signifier quelque chose (correction d'anomalie, développement d'une fonctionnalité /
fragment de fonctionnalité)

37
Commit

• Techniquement : Pointeur vers un snapshot du filesystem dans son ensemble


• Connaît son ou ses parents
• Possède un identifiant unique (hash SHA1) basé sur le contenu et sur le ou les
parents

38
Commit

• Le repository contient l’ensemble des commits organisés sous forme de graphe acyclique
direct :
• Depuis un commit, on peut accéder à tous ses ancêtres
• Un commit ne peut pas connaître ses descendants
• On peut accéder à un commit via son ID unique
• Des pointeurs vers les commits permettent d’y accéder facilement (branches, tags)

C2 branche1

C0 C1

C3 C4 branche2
39
Staging area

• C’est la liste des modifications effectuées dans la working copy et qu’on veut inclure dans le
prochain commit.
• On construit cette liste explicitement.
• git status : affiche le statut de la working copy et de la staging area
• git add : ajoute un fichier à la staging area
• git rm --cached : unstage un nouveau fichier
• git checkout -- : retire un fichier de la staging area

40
Commit

• git commit -m “mon commentaire de commit”


→ génère un commit avec les modifications contenues dans la staging area
• git commit -a -m “mon commentaire de commit”
→ ajoute tous les fichiers modifiés (pas les ajouts / suppressions) à la staging area et
commite
• git commit --amend
→ corrige le commit précédent

41
Gestion de sources avec Git : Workflow

• Le répertoire de travail (working directory) est le répertoire dans


lequel se fait les développements.
• Ce répertoire contient des fichiers suivis par Git ainsi que des
fichiers non-suivis.
• La zone d’index (staging area) contient les fichiers qui feront
partie du prochain commit.
• Le répertoire Git (repository) est l’endroit où Git stocke les
métadonnées et la base de données des objets du projet.
• Ce répertoire contient tous les fichiers suivi et tout l’historique du
projet.

42
Gestion de sources avec Git : Workflow

• Modification des fichiers dans le répertoire de travail


(working directory).
• Indexation du contenu modifié (git add), en vue du
prochain instantané.
• Validation (commit) basculant les modifications dans le
répertoire Git (repository).

43
Gestion de sources avec Git : Workflow

44
Historique des versions

• git log [-n][-p][--oneline]: historique


• affiche les ID des commits, les messages, les modifications
• -n : limite à n commits
• -p : affiche le diff avec le commit précédent
• --oneline : affiche uniquement le début de l’ID du commit et le commentaire sur une seule ligne
pour chaque commit
• git show [--stat]: branche, tag, commit-id …
• montre le contenu d’un objet
• git diff :
• git diff id_commit : diff entre working copy et commit
• git diff id_commit1 id_commit2 : diff entre deux commits

45
Ancêtres et références

• id_commit^ : parent du commit


• id_commit^^ : grand-père du commit…
• id_commit~n : n-ième ancêtre du commit
• id_commit~2 : deuxième parent du commit
• id_commit1..id_commit2 : variations entre le commit 1 et le commit 2
• (ex. git log id_commit1..id_commit2 : tous les commits accessibles depuis commit2 sans
ceux accessibles depuis commit1)

46
Git diff : utilisation

• git diff
• Différence entre l’index et les working files
• git diff --staged
• Différence entre l’index et le HEAD
• git diff HEAD
• Différence entre le HEAD et les working files
• git diff <commit1> <commit2>

47
Exercices
basic-commits
basic-staging

48
Travailler avec les
branches
Branches: Introduction

• Déviation par rapport à la route principale


• Permet le développement de différentes versions en parallèle
• Version en cours de développement
• Version en production (correction de bugs)
• Version en recette
• ...
• On parle de “merge” lorsque tout ou partie des modifications d'une branche sont rapatriées
dans une autre
• On parle de “feature branch” pour une branche dédiée au développement d'une
fonctionnalité (ex : gestion des contrats...)

50
Branches: Introduction

• branch : pointeur sur le dernier commit (sommet) de la branche


• les branches sont des références
• master : branche principale (trunk)
• HEAD : pointeur sur la position actuelle de la working copy

51
Branches: Création

• git branch <mabranche> (création)


• git checkout <mabranche> (se positionner dessus)

• Ou git checkout -b <mabranche> (création + se positionner dessus)


• git branch → liste des branches (locales)

52
Branches: Suppression

• git branch –d mabranche (erreur si pas mergé)


• git branch –D mabranche (forcé)
• Supprime la référence, pas les commits (on peut toujours récupérer via reflog en cas
d'erreur)

53

Vous aimerez peut-être aussi