# Git 2025 Pomme Pompeani CC-BY-SA-NC --- ### Historique rapide - Linus Torvalds - Linux - Avril 2005 - Quelques semaines de travail --- ### Features - Logiciel libre - Remplacement de BitKeeper - Distribué (local-first) 👥 - Historique non linéaire 📏 - Difficile à corrompre 💰 --- ### Pratique --- 1 Dépôt (ou *Repository*) = 1 projet Exemples : - logiciel - backend + frontend d'une application web - mes cours ---- ### Décentralisé ```rust "Git" != "GitHub" ``` --- ### Exemples en ligne -
-
-
-
-
Note: Petit passage sur des exemples de repo en ligne pour montrer à quoi ça ressemble ---- ### `git clone` Télécharge une copie complète Note: Tout l'historique. Reconstruit les fichiers à partir du dossier .git en appliquant tous les commits ---- ### Les 3 espaces de Git - Working Directory - Staging Area - Local Repository Note: Schéma avec opérations (add / reset / commit) --- ### Commit Une modification atomique --- Et pour des longues modifications ? Note: celles sur lesquelles on travaille plusieurs heures / jours / semaines ---- ### Les branches 🍃 Divergence effectuée pour travailler sur une fonctionnalité pendant plusieurs commits ---- ### On est toujours sur une branche
Et elle s'appelle *main* par défaut ---- #### `git branch
` Crée la branche `
`. Ex: `git branch feature-typing-notifications` ---- #### `git switch
` Change de branche courante. Déplace la *HEAD*. ---- #### `git switch -c
` 2-en-1 : Crée la branche et bascule dessus. ---- Rappel : `git switch -d` permet de se déplacer sur un commit via son nom. - `-d` == `--detach` - → On accepte d'être "détaché·e" d'une branche - → On accepte de n'être sur aucune branche. Par défaut, `git switch` attend un nom de branche. ---- #### `git branch -d
` Supprime un branche. Refuse de supprimer si pas ***fusionnée*** --- ### Fusion ?
---- ### L'arbre Les branches forment un arbre Note: dessin ! ---- ### Pas un vrai arbre Les branches peuvent refusionner ensemble. Fusion = *Merge* en anglais ---- #### `git merge
` Fusionne *dans la branche actuelle* la branche *`
`*. Va créer un commit de fusion. ---- #### exemple de merge - On est sur *css-refacto* - On veut la fusionner dans *main* - On se déplace sur main : `git switch main` - On fusionne la branche : `git merge css-refacto` - (On se félicite. Bravo) Note: faire un exemple sur rapport_r2.16 Partir du premier commit, faire une intro. Revenir au 1er commit, faire une description. Merge, merge. Montrer le commit de merge avec git show. --- ### Conflit 🗣️ Quand ça va mal :( ---- #### Quoi, un conflit ? Sur les deux branches à fusionner, deux modifications ont eu lieu sur la même ligne 🙀 Git ne sait pas qui choisir ! ---- #### Comment, un conflit ? - une ligne a été modifiée des deux côtés - une ligne a été modifiée d'un côté, supprimée de l'autre - au même endroit, deux lignes ont été ajoutées ---- #### Corriger un conflit - résoudre manuellement chaque conflit. - `git add` les fichiers résolus - `git commit` pour créer le commit de merge