Formation Git Rapide - De Débutant à Avancé

1. Introduction à Git

Git est un système de contrôle de version distribué essentiel pour le développement logiciel moderne. Il permet de suivre les modifications de code, de collaborer efficacement et de gérer différentes versions d'un projet.
# Aucun code pour cette étape

Pratique :

Familiarisez-vous avec les concepts de base de Git et son importance dans le développement logiciel.

2. Installation de Git

L'installation de Git varie selon votre système d'exploitation. Voici les instructions pour les principaux systèmes :
  • Sous Linux: ``bash sudo apt-get update sudo apt-get install git ``
  • Sous macOS: ``bash brew install git ``
  • Sous Windows: Téléchargez le programme d'installation à partir de git-scm.com et suivez les instructions.
# Vérifiez l'installation avec:
git --version

Pratique :

Installez Git sur votre système en suivant les instructions correspondant à votre OS. Vérifiez ensuite que l'installation a réussi en exécutant 'git --version' dans votre terminal.

3. Configuration initiale de Git

Après l'installation, vous devez configurer Git avec votre nom et votre email. Ces informations seront utilisées pour identifier vos commits.
git config --global user.name "Votre Nom"
git config --global user.email "votre@email.com"

# Vérifiez la configuration
git config --list

Pratique :

Configurez Git avec votre nom et votre email. Vérifiez ensuite votre configuration avec 'git config --list'.

4. Concepts de base de Git

Avant de commencer à utiliser Git, il est crucial de comprendre ses concepts fondamentaux. Voici les quatre piliers de Git :
  • Repository (Dépôt): Un conteneur pour votre projet.
      Contenu : Fichiers source + historique complet des modifications.Types : Local (sur votre machine) ou distant (ex : sur GitHub).
  • Commit: Un instantané de votre projet à un instant T.
      Capture l'état de tous les fichiers suivis.Possède un message décrivant les changements.Est identifié par un hash unique.
  • Branch (Branche): Une ligne de développement indépendante.
      Permet de travailler sur différentes fonctionnalités en parallèle.La branche principale est généralement nommée 'main' ou 'master'.
  • Merge: L'action de combiner deux branches.
      Intègre les changements d'une branche dans une autre.Crée un nouveau commit qui unit les historiques des deux branches.
# Créer un nouveau repository
git init

# Faire un commit
git commit -m "Description des changements"

# Créer une nouvelle branche
git branch nom_de_la_branche

# Fusionner une branche
git merge nom_de_la_branche

Pratique :

Pour chaque concept (repository, commit, branch, merge), essayez d'expliquer son rôle dans vos propres mots. Imaginez ensuite un petit projet et décrivez comment vous utiliseriez chacun de ces concepts dans ce projet.

5. Création et initialisation d'un dépôt

Maintenant que vous comprenez les concepts de base, créons votre premier dépôt Git.
mkdir mon_projet
cd mon_projet
git init
git status

Pratique :

Créez un nouveau dossier pour votre projet, initialisez-y un dépôt Git, puis vérifiez son statut avec 'git status'.

6. Les bases du suivi de fichiers

Git suit les modifications de vos fichiers à travers différentes étapes : non suivi, modifié, indexé (staged), et commité.
echo "# Mon Projet" > README.md
git add README.md
git commit -m "Initial commit: Ajout du fichier README"

Pratique :

Créez un fichier README.md, ajoutez-le à l'index avec 'git add', puis effectuez votre premier commit.

7. Visualisation de l'historique

Git garde un historique détaillé de tous les commits. Apprendre à le visualiser est crucial.
git log
git log --oneline --graph --all

Pratique :

Faites plusieurs commits, puis explorez l'historique de votre dépôt en utilisant différentes options de la commande 'git log'.

8. Travailler avec des branches

Les branches permettent de développer des fonctionnalités en parallèle sans affecter la ligne principale de développement.
git branch feature-x
git checkout feature-x
# ou en une seule commande :
git checkout -b feature-y

Pratique :

Créez une nouvelle branche pour une fonctionnalité, basculez dessus, et faites quelques commits.

9. Fusion de branches

Une fois le travail sur une branche terminé, vous devez le réintégrer dans la branche principale.
git checkout main
git merge feature-x

Pratique :

Fusionnez la branche que vous avez créée précédemment dans la branche principale (main).

10. Résolution de conflits

Les conflits surviennent lorsque Git ne peut pas automatiquement fusionner des modifications. Apprendre à les résoudre est essentiel.
git merge feature-y
# Si un conflit apparaît, éditez les fichiers, puis :
git add .
git commit -m "Résolution des conflits de fusion"

Pratique :

Créez intentionnellement un conflit en modifiant le même fichier sur deux branches, puis fusionnez-les et résolvez le conflit.

11. Travailler avec des dépôts distants

Les dépôts distants permettent de collaborer et de sauvegarder votre travail en ligne. GitHub est un service populaire pour héberger des dépôts Git.
git remote add origin https://github.com/votre-nom/mon-projet.git
git push -u origin main

Pratique :

Créez un dépôt sur GitHub, liez-le à votre dépôt local, puis poussez vos commits.

12. Récupération des modifications distantes

Maintenir votre dépôt local à jour avec le dépôt distant est crucial pour une collaboration efficace.
git fetch origin
git pull origin main

Pratique :

Simulez des changements sur le dépôt distant (ou collaborez avec quelqu'un), puis récupérez ces changements localement.

13. Utilisation de .gitignore

Le fichier .gitignore permet d'exclure certains fichiers ou dossiers du suivi Git, comme les fichiers de build ou les dépendances.
echo "*.log
node_modules/
build/" > .gitignore
git add .gitignore
git commit -m "Ajout du fichier .gitignore"

Pratique :

Créez un fichier .gitignore adapté à votre projet et committez-le.

14. Techniques de rebasage

Le rebasage est une alternative à la fusion qui permet de maintenir un historique de projet plus linéaire.
git checkout feature-z
git rebase main

Pratique :

Créez une branche, faites quelques commits, puis utilisez rebase pour l'intégrer proprement à la branche principale.

15. Git avancé : cherry-pick et reflog

Cherry-pick permet d'appliquer des commits spécifiques, tandis que reflog est un outil puissant pour récupérer des commits 'perdus'.
git cherry-pick <commit-hash>
git reflog

Pratique :

Utilisez cherry-pick pour appliquer un commit spécifique d'une branche à une autre. Explorez ensuite l'historique de vos actions avec reflog.

16. Bonnes pratiques et flux de travail

Adoptez des bonnes pratiques pour une utilisation efficace de Git, comme des messages de commit descriptifs et un flux de travail cohérent.
git commit -m "feat: Ajoute une fonctionnalité de recherche avancée"
git pull --rebase origin main

Pratique :

Révisez vos derniers commits pour améliorer leurs messages. Simulez un flux de travail complet : création de branche, commits, rebase, et merge.

17. Cas pratique : Développement d'un petit projet

Dans ce cas pratique, vous allez simuler le développement d'un petit projet web en utilisant Git. Vous allez créer un repository, travailler sur différentes fonctionnalités dans des branches séparées, gérer des conflits, et collaborer avec un dépôt distant.
# Initialisation du projet
git init mon-site-web
cd mon-site-web

# Création des fichiers de base
echo '<!DOCTYPE html><html><head><title>Mon Site</title></head><body><h1>Bienvenue</h1></body></html>' > index.html
echo '/* Styles de base */' > styles.css

# Premier commit
git add .
git commit -m "Initial commit: structure de base du site"

# Création d'une branche pour une nouvelle fonctionnalité
git checkout -b feature-nav

# Ajout d'une barre de navigation
echo '<nav><ul><li>Accueil</li><li>À propos</li><li>Contact</li></ul></nav>' >> index.html
git commit -am "Ajout d'une barre de navigation"

# Retour à la branche principale et création d'une autre branche
git checkout main
git checkout -b feature-footer

# Ajout d'un pied de page
echo '<footer>&copy; 2024 Mon Site</footer>' >> index.html
git commit -am "Ajout d'un pied de page"

# Fusion des branches
git checkout main
git merge feature-nav
git merge feature-footer

# Gestion d'un conflit (si nécessaire)
# Éditez manuellement index.html pour résoudre le conflit
git add index.html
git commit -m "Fusion des branches nav et footer, résolution des conflits"

# Simulation d'un dépôt distant
git remote add origin https://github.com/votre-nom/mon-site-web.git
git push -u origin main

# Simulation d'un changement distant
git checkout -b feature-remote
echo '<script src="app.js"></script>' >> index.html
git commit -am "Ajout d'un lien vers un fichier JavaScript"
git push -u origin feature-remote

# Récupération et intégration des changements distants
git checkout main
git pull origin main
git merge origin/feature-remote

# Nettoyage
git branch -d feature-nav feature-footer feature-remote

Pratique :

Suivez les étapes du code exemple pour simuler le développement d'un petit site web. À chaque étape, prenez le temps de comprendre ce que vous faites et pourquoi. Essayez de prédire le résultat de chaque commande avant de l'exécuter. Après avoir terminé, réfléchissez à la façon dont Git a facilité le processus de développement et de collaboration.