NSI 1ère

Versionnement et historique
Exercices corrigés

Maîtrisez le versionnement et l'historique : Git, commits, branches, fusion et bonnes pratiques de gestion de versions grâce à ces 5 exercices détaillés.

Concepts & Exercices
\(\text{Version} = \text{Commit}^{\text{Historique}}\)
Gestion de versions
Commit
git commit
Sauvegarde d'état
Branch
git branch
Ligne de développement
Merge
git merge
Fusion de branches
💾
Historique : Enregistrement chronologique des modifications apportées au code.
🔄
Versionnement : Système permettant de gérer différentes versions d'un projet.
🏗️
Git : Système de contrôle de version distribué largement utilisé.
Exercice 1
Créer un dépôt Git et effectuer des commits successifs
Exercice 2
Créer et gérer des branches dans un projet Git
Exercice 3
Fusionner des branches avec Git merge
Exercice 4
Gérer des versions avec des tags Git
Exercice 5
Annuler des modifications dans l'historique Git
Corrigé : Exercices 1 à 3
1 Initialisation Git
Définition :

Git : Système de contrôle de version distribué permettant de suivre les modifications dans les fichiers et coordonner le travail entre plusieurs développeurs.

Méthode de gestion de version :
  1. Initialiser un dépôt Git avec git init
  2. Ajouter des fichiers avec git add
  3. Créer des commits avec git commit
  4. Voir l'historique avec git log
a1b2c3d4 Initial commit
e5f6g7h8 Ajout de la fonction principale
i9j0k1l2 Correction de bug dans la fonction
Étape 1 : Initialiser le dépôt

git init crée un nouveau dépôt Git dans le dossier courant

Étape 2 : Ajouter des fichiers

git add . ajoute tous les fichiers modifiés à la zone de staging

Étape 3 : Créer un commit

git commit -m "message" enregistre l'état actuel du projet

Historique final :

Série de commits chronologiquement ordonnés avec des messages descriptifs

Règles appliquées :

Messages clairs : Chaque commit a un message descriptif

Atomicité : Chaque commit représente une modification logique unique

Fréquence : Commits réguliers pour sauvegarder l'avancement

2 Gestion de branches
Définition :

Branche : Ligne de développement indépendante dans un dépôt Git permettant de travailler sur des fonctionnalités sans affecter la branche principale.

a1b2c3d4 Initial commit
e5f6g7h8 Ajout de la fonction principale
i9j0k1l2 Correction de bug
├── m3n4o5p6 Nouvelle fonctionalité (branche feature)
├── q7r8s9t0 Amélioration de la fonctionalité
└── u1v2w3x4 Documentation mise à jour
Étape 1 : Créer une nouvelle branche

git branch nom_branche crée une nouvelle branche

Étape 2 : Se déplacer vers la branche

git checkout nom_branche bascule vers la branche spécifiée

Étape 3 : Travailler sur la branche

Effectuer des modifications et créer des commits sur la branche

Structure finale :

Branche principale stable avec une branche de développement parallèle

Règles appliquées :

Isolation : Chaque fonctionnalité est développée dans sa propre branche

Nommage : Noms des branches descriptifs et cohérents

Synchronisation : Mise à jour régulière de la branche depuis la principale

3 Fusion de branches
Définition :

Fusion (merge) : Opération qui combine les modifications de deux branches en une seule.

a1b2c3d4 Initial commit
e5f6g7h8 Ajout de la fonction principale
i9j0k1l2 Correction de bug
├── m3n4o5p6 Nouvelle fonctionalité
├── q7r8s9t0 Amélioration de la fonctionalité
└── u1v2w3x4 Documentation mise à jour
└── y5z6a7b8 Merge branch 'feature'
Étape 1 : Se placer sur la branche cible

git checkout main bascule sur la branche principale

Étape 2 : Fusionner la branche source

git merge nom_branche fusionne la branche source dans la cible

Étape 3 : Résoudre les conflits éventuels

Modifier manuellement les fichiers en conflit si nécessaire

Résultat de la fusion :

La branche principale contient maintenant toutes les modifications de la branche secondaire

Règles appliquées :

Sécurité : Vérifier que la branche source est prête avant la fusion

Tests : S'assurer que le code fonctionne après la fusion

Documentation : Garder un historique clair des fusions

Corrigé : Exercices 4 à 5
4 Gestion des versions
Définition :

Tag : Repère permanent pointant vers un commit spécifique, généralement utilisé pour marquer des versions.

a1b2c3d4 Initial commit
e5f6g7h8 Ajout de la fonction principale
i9j0k1l2 Correction de bug
m3n4o5p6 Fonctionnalité complétée v1.0
q7r8s9t0 Amélioration de performance
u1v2w3x4 Nouvelle fonctionalité v1.1
Étape 1 : Identifier un commit stable

Sélectionner un commit qui représente une version fonctionnelle du projet

Étape 2 : Créer un tag annoté

git tag -a v1.0 -m "Version 1.0 stable" crée un tag annoté

Étape 3 : Pousser le tag vers le dépôt distant

git push origin v1.0 envoie le tag au serveur

Versions disponibles :

Tags v1.0, v1.1, etc. permettant d'accéder à des versions spécifiques du code

Règles appliquées :

Stabilité : Seuls les commits stables sont tagués

Nomenclature : Utilisation d'un schéma de version cohérent (ex: v1.0.0)

Documentation : Messages descriptifs pour chaque version

5 Annulation de modifications
Définition :

Annulation : Processus de retour à un état précédent du dépôt Git, pour corriger des erreurs.

a1b2c3d4 Initial commit
e5f6g7h8 Ajout de la fonction principale
i9j0k1l2 Correction de bug
m3n4o5p6 Erreur introduite ici
q7r8s9t0 Autre modification
u1v2w3x4 Annulation du commit m3n4o5p6
Étape 1 : Identifier le commit problématique

Utiliser git log pour trouver le commit à annuler

Étape 2 : Annuler le commit avec reset

git reset --hard HEAD~1 annule le dernier commit

Étape 3 : Alternativement, utiliser revert

git revert hash_commit crée un nouveau commit annulant les changements

État restauré :

Le dépôt est revenu à l'état souhaité avant l'introduction de l'erreur

Règles appliquées :

Prudence : Ne jamais reset sur des commits partagés publiquement

Revert : Préférer git revert pour les commits partagés

Sauvegarde : Toujours vérifier l'état avant d'annuler des modifications

Cours bien détaillé
\(\text{État}_{n} = \text{État}_{n-1} \oplus \text{Commit}_n\)
Avancement de l'historique
🎯
Définition : Le versionnement permet de suivre l'évolution d'un projet informatique au fil du temps.
📏
Objectif : Permettre de revenir à des versions antérieures et de collaborer efficacement.
📐
Git : Système de contrôle de version distribué le plus utilisé dans le développement logiciel.
📝
Historique : Chronologie des modifications apportées au code avec des métadonnées (auteur, date, message).
💡
Conseil : Faire des commits fréquents et atomiques pour faciliter la gestion des versions
🔍
Attention : Ne jamais modifier l'historique d'un dépôt partagé sans coordination
Astuce : Utiliser des branches pour isoler le développement de nouvelles fonctionnalités
📋
Méthode : Suivre une convention de nommage pour les branches et commits
Vérification : Toujours tester le code avant de valider un commit
Commandes Git essentielles :
  • Initialisation : git init - créer un dépôt
  • Ajout : git add - ajouter des fichiers à l'index
  • Validation : git commit - enregistrer les modifications
  • Historique : git log - voir l'historique des commits
  • Branches : git branch - gérer les branches
  • Fusion : git merge - combiner les branches
Règles importantes :
  • Un bon message de commit explique le pourquoi du changement
  • Les branches permettent de travailler sur plusieurs fonctionnalités en parallèle
  • La fusion de branches doit être effectuée avec soin pour éviter les conflits
  • Les tags sont utilisés pour marquer des versions stables du logiciel
  • L'historique Git doit rester cohérent et lisible pour tous les contributeurs
Versionnement et historique Structure du code