Qu’est-ce que le contrôle de version ?
Un système de contrôle de version (ou VCS pour Version Control System) est un programme ou un ensemble de programmes qui permet de suivre les modifications apportées à un ensemble de fichiers.
L’un des objectifs d’un VCS est de pouvoir retrouver facilement des versions antérieures d’un fichier ou de l’ensemble du projet. Un autre objectif est de permettre à plusieurs membres d’une équipe de travailler simultanément sur un projet, même sur les mêmes fichiers, sans interférer avec le travail des autres.
Un autre nom pour un VCS est système de gestion de configuration logicielle (SCM pour Software Configuration Management). Les deux termes sont souvent utilisés de manière interchangeable — en fait, la documentation officielle de Git se trouve sur git-scm.com.
Techniquement, le contrôle de version n’est qu’une des pratiques couvertes par la gestion de configuration logicielle. Un VCS peut également être utilisé pour des projets autres que des logiciels, comme des livres ou des tutoriels en ligne.
Avec un VCS, vous pouvez :
- Voir toutes les modifications apportées à votre projet, quand elles ont été faites et par qui.
- Ajouter un message explicatif à chaque modification.
- Récupérer des versions précédentes du projet ou de fichiers individuels.
- Créer des branches pour expérimenter des modifications. Cela permet à plusieurs personnes de travailler sur différentes fonctionnalités ou corrections de bugs en parallèle, sans affecter la branche principale. Vous pouvez ensuite fusionner les modifications souhaitées dans la branche principale.
- Ajouter des balises à une version, par exemple pour marquer une nouvelle version de publication.
À propos de Git
Git est un VCS rapide, polyvalent, hautement évolutif, gratuit et open source.
Son auteur principal est Linus Torvalds, le créateur de Linux.
Contrôle de version distribué
Les premières versions des systèmes de contrôle de version (VCS), comme CVS, Subversion (SVN) et Perforce, utilisaient un serveur centralisé pour stocker l’historique d’un projet. Cette centralisation faisait du serveur un point de défaillance unique potentiel.
Git est distribué, ce qui signifie que l’historique complet d’un projet est stocké à la fois sur le client et sur le serveur. Vous pouvez modifier des fichiers sans connexion réseau, valider les changements localement, puis synchroniser avec le serveur une fois la connexion rétablie.
Si un serveur tombe en panne, vous disposez toujours d’une copie locale du projet. Techniquement, vous n’avez même pas besoin de serveur : les modifications peuvent être partagées par e-mail ou via des supports amovibles — mais en pratique, personne n’utilise Git de cette manière.
Terminologie Git
Pour comprendre Git, il faut connaître sa terminologie. Voici une liste de termes fréquemment utilisés. Ne vous inquiétez pas des détails pour l’instant — vous vous familiariserez avec ces termes au fil des exercices du module.
- Arborescence de travail (Working tree) : Ensemble de répertoires et fichiers imbriqués contenant le projet en cours.
- Dépôt (Repository ou repo) : Répertoire situé à la racine de l’arborescence de travail, où Git conserve tout l’historique et les métadonnées du projet.
Un dépôt nu (bare repo) n’est pas lié à une arborescence de travail ; il est utilisé pour le partage ou la sauvegarde. Il se termine souvent par.git
(ex. :projet.git
). - Hash : Nombre généré par une fonction de hachage représentant le contenu d’un fichier ou objet sous forme de chiffres fixes. Git utilise des hashes de 160 bits. Cela permet à Git de détecter les modifications de fichiers en comparant les hashes, indépendamment de la date ou de l’heure.
- Objet (Object) : Un dépôt Git contient quatre types d’objets, chacun identifié par un hash SHA-1 :
- Blob : contient un fichier.
- Tree : représente un répertoire (noms, permissions, hashes).
- Commit : version spécifique de l’arborescence.
- Tag : nom attaché à un commit.
- Commit : En tant que verbe, signifie créer un objet de commit. Cela revient à valider les modifications pour qu’elles soient visibles par d’autres.
- Branche (Branch) : Série nommée de commits liés. Le commit le plus récent est appelé head.
La branche par défaut est appelée main (ou master dans certains cas). Le head de la branche active est nommé HEAD.
Les branches permettent de travailler indépendamment, puis de fusionner les modifications dans la branche principale. - Distant (Remote) : Référence nommée vers un autre dépôt Git. Par défaut, Git crée un remote nommé
origin
pour les opérationspush
etpull
. - Commandes, sous-commandes et options :
Les opérations Git s’effectuent via des commandes commegit push
ougit pull
.git
est la commande principalepush
oupull
sont des sous-commandes- Les options sont ajoutées avec
-
ou--
(ex. :git reset --hard
)
Ces termes — et d’autres comme push
et pull
— deviendront plus clairs avec la pratique. N’hésitez pas à revenir à ce glossaire après avoir terminé le module.
Ligne de commande Git
Il existe plusieurs interfaces graphiques (GUI) pour Git, comme GitHub Desktop.
De nombreux éditeurs de code, comme Visual Studio Code, intègrent aussi Git.
Mais aucun ne couvre toutes les fonctionnalités de Git.
Les exercices de ce module utilisent la ligne de commande Git, en particulier dans Azure Cloud Shell.
L’interface en ligne de commande fonctionne de la même manière sur tous les systèmes d’exploitation, et donne accès à toutes les capacités de Git.
Les développeurs qui utilisent uniquement une interface graphique se retrouvent parfois bloqués par des erreurs qu’ils ne peuvent résoudre qu’en revenant à la ligne de commande.
Git et GitHub
En travaillant avec Git, vous vous demanderez peut-être quelles sont les différences entre Git et GitHub.
- Git est un système de contrôle de version distribué (DVCS) que plusieurs développeurs peuvent utiliser pour travailler sur un projet. Il permet de gérer des branches locales, puis de les pousser vers un dépôt distant.
- GitHub est une plateforme cloud qui repose sur Git. Elle facilite la collaboration grâce à :
- une interface web
- des outils en ligne de commande supplémentaires
- un flux de travail simplifié
GitHub agit comme le dépôt distant mentionné précédemment.
Fonctionnalités clés de GitHub :
- Issues (tickets)
- Discussions
- Pull requests
- Notifications
- Étiquettes (Labels)
- Actions
- Forks
- Projets
Pour en savoir plus sur GitHub, consultez le module Introduction à GitHub sur Tutoriel Github ou la documentation Premiers pas avec GitHub.