Passer au contenu principal

🌿 Qu'est-ce que Git ?

📖 Définition

Git est un système de contrôle de version distribué. Il suit et gère l'historique des modifications de code et permet à plusieurs développeurs de travailler simultanément. GitHub, GitLab et Bitbucket sont des services qui hébergent des dépôts Git, facilitant la collaboration et le partage de code.

🎯 Comprendre avec l'Analogie

Points de Sauvegarde de Jeu

Pensez à Git comme le système de sauvegarde d'un jeu :

  • Commit : Sauvegarde du jeu - sauvegarde l'état actuel
  • Branch : Monde parallèle - essayer différents choix tout en gardant l'histoire principale
  • Merge : Combiner des mondes parallèles - appliquer de bons résultats à l'histoire principale
  • Revert : Retourner à une sauvegarde précédente - récupérer en cas d'erreurs

⚙️ Fonctionnement

Les 3 Zones de Git

Working Directory (Répertoire de travail)
↓ git add
Staging Area (Zone de préparation)
↓ git commit
Repository (Dépôt)
↓ git push
Remote Repository (Dépôt distant)

Flux de Travail Git

1. Modifier les fichiers (Working Directory)
2. Préparer les modifications (Staging Area) → git add
3. Créer un commit (Local Repository) → git commit
4. Pousser vers distant (Remote Repository) → git push

💡 Exemples Réels

Commandes Git de Base

# Initialiser dépôt Git
git init
# Ou cloner dépôt distant
git clone https://github.com/username/repo.git

# Vérifier l'état
git status

# Préparer les modifications
git add index.html # Fichier spécifique
git add . # Tous les fichiers

# Créer commit
git commit -m "feat: Ajouter connexion utilisateur"

# Push (téléverser)
git push origin main

# Pull (télécharger)
git pull origin main

Opérations sur les Branches

# Vérifier les branches
git branch

# Créer nouvelle branche
git branch feature-login

# Changer de branche
git checkout feature-login
# Ou créer et changer simultanément
git checkout -b feature-login

# Méthode la plus récente (Git 2.23+)
git switch feature-login
git switch -c feature-login

# Fusionner branche
git checkout main
git merge feature-login

# Supprimer branche
git branch -d feature-login

Scénario de Collaboration

# === Développeur A ===
# 1. Cloner dépôt
git clone https://github.com/team/project.git

# 2. Créer nouvelle branche de fonctionnalité
git checkout -b feature-payment

# 3. Écrire du code et committer
git add .
git commit -m "Implémenter fonction de paiement"

# 4. Pousser vers distant
git push origin feature-payment

# 5. Créer Pull Request sur GitHub

# === Développeur B ===
# 1. Synchroniser le code le plus récent
git checkout main
git pull origin main

🤔 Questions Fréquentes

Q1. Quelle est la différence entre Git et GitHub ?

R :

Git (Outil)
├─ Système de contrôle de version (logiciel)
├─ Fonctionne sur ordinateur local
├─ Utilisé via ligne de commande (CLI)
└─ Gratuit, open source

GitHub (Service)
├─ Service d'hébergement de dépôts Git
├─ Plateforme basée sur le web
├─ Fonctions de collaboration (PR, Issue, Wiki)
└─ Partage de code et open source

Analogie : Git = Traitement de texte, GitHub = Google Docs

Q2. Comment écrire des messages de commit ?

R : Suivez des conventions claires et cohérentes :

# ✅ Bons messages de commit
git commit -m "feat: Ajouter API de connexion utilisateur"
git commit -m "fix: Résoudre erreur de clic sur bouton d'inscription"
git commit -m "refactor: Supprimer code dupliqué et séparer fonctions"

# ❌ Mauvais messages de commit
git commit -m "mise à jour"
git commit -m "corrigé bug"
git commit -m "en cours..."

# Règles Conventional Commits
feat: Nouvelle fonctionnalité
fix: Correction de bug
docs: Modifications de documentation
style: Formatage de code
refactor: Refactorisation de code
test: Ajout de tests
chore: Build, modifications de configuration

Q3. Différence entre Merge et Rebase ?

R :

# Merge
# - Préserve l'historique de branche tel quel
# - Crée commit de fusion
git checkout main
git merge feature-login

Résultat :
A---B---C---D main
\ /
E-----F feature-login

# Rebase
# - Déplace branche vers base différente
# - Maintient historique linéaire
git checkout feature-login
git rebase main

Résultat :
A---B---C---D main
\
E'---F' feature-login

# Quand utiliser ?
Merge: Collaboration en équipe, Pull Request
Rebase: Nettoyage de branche personnelle, historique propre

Q4. Comment résoudre les Conflits ?

R :

# Conflit se produit
git merge feature-login
# CONFLICT (content): Merge conflict in index.html

# Vérifier fichiers en conflit
git status

# Ouvrir fichier et résoudre manuellement
# <h1>Titre Final</h1>

# Marquer comme résolu
git add index.html
git commit -m "Merge branch 'feature-login' - conflit de titre résolu"

# Annuler fusion si nécessaire
git merge --abort

🎬 Résumé

Git est un outil essentiel pour le développement moderne :

  • Contrôle de Version : Suit tout l'historique des modifications
  • Collaboration : Plusieurs développeurs travaillent simultanément
  • Branch : Expérimentation sécurisée et développement de fonctionnalités
  • Récupération : Retourner à l'état précédent à tout moment

Maîtriser Git permet de gérer le code avec confiance et de collaborer efficacement en équipe ! 🌿✨