Synchronisation avec GitHub
Table des matières
- Les remotes Git
- Cloner un dépôt
- Git fetch vs git pull
- Git push
- Gestion des conflits
- Workflows de synchronisation
- Bonnes pratiques
1 - Les remotes Git
Qu'est-ce qu'un remote ?
Un remote est une référence vers un dépôt distant (comme GitHub).
┌─────────────────┐ ┌─────────────────┐
│ Local Repo │ ←────── │ GitHub Repo │
│ (votre PC) │ ──────→ │ (origin) │
└─────────────────┘ └─────────────────┘
↑ ↑
git pull git push
git fetch
Voir les remotes
git remote -v
Résultat :
origin [email protected]:user/repo.git (fetch)
origin [email protected]:user/repo.git (push)
Ajouter un remote
git remote add origin [email protected]:user/repo.git
Autres commandes remote
# Renommer un remote
git remote rename origin github
# Changer l'URL
git remote set-url origin [email protected]:user/new-repo.git
# Supprimer un remote
git remote remove origin
# Voir les détails
git remote show origin
🔝 Retour à la table des matières
2 - Cloner un dépôt
Clone de base
# Via SSH (recommandé)
git clone [email protected]:user/repo.git
# Via HTTPS
git clone https://github.com/user/repo.git
Options de clone
# Cloner dans un dossier spécifique
git clone [email protected]:user/repo.git mon-dossier
# Cloner une branche spécifique
git clone -b develop [email protected]:user/repo.git
# Clone superficiel (sans historique)
git clone --depth 1 [email protected]:user/repo.git
# Clone avec sous-modules
git clone --recurse-submodules [email protected]:user/repo.git
Ce qui se passe lors d'un clone
- Télécharge tout le dépôt
- Configure automatiquement
origin - Crée une branche locale
mainliée àorigin/main
🔝 Retour à la table des matières
3 - Git fetch vs git pull
Git fetch
Télécharge les modifications sans les appliquer.
git fetch origin
git fetch origin main
git fetch --all # Tous les remotes
Après un fetch :
# Voir les différences
git diff main origin/main
# Appliquer manuellement
git merge origin/main
Git pull
Télécharge ET applique les modifications (fetch + merge).
git pull origin main
git pull # Si tracking configuré
Comparaison
| Aspect | fetch | pull |
|---|---|---|
| Télécharge | ✅ | ✅ |
| Applique | ❌ | ✅ |
| Sécurité | ✅ Plus sûr | ⚠️ Peut créer des conflits |
| Contrôle | Total | Automatique |
Quand utiliser quoi ?
# Workflow sécurisé (recommandé)
git fetch origin
git log HEAD..origin/main # Voir ce qui a changé
git merge origin/main # Appliquer
# Workflow rapide
git pull origin main
Pull avec rebase
# Au lieu de merge
git pull --rebase origin main
# Configurer par défaut
git config --global pull.rebase true
🔝 Retour à la table des matières
4 - Git push
Push de base
git push origin main
Premier push (avec tracking)
git push -u origin main
# ou
git push --set-upstream origin main
Après -u, vous pouvez simplement faire :
git push
git pull
Push d'une nouvelle branche
# Créer et pousser une branche
git checkout -b feature/new-feature
git push -u origin feature/new-feature
Push de toutes les branches
git push --all origin
Push des tags
# Un tag
git push origin v1.0.0
# Tous les tags
git push --tags
Force push (dangereux)
# Écrase l'historique distant
git push --force
# Plus sécurisé (vérifie que personne n'a push entre temps)
git push --force-with-lease
⚠️ Ne jamais force push sur main/master si d'autres travaillent dessus !
🔝 Retour à la table des matières
5 - Gestion des conflits
Quand survient un conflit ?
Quand vous et quelqu'un d'autre avez modifié la même partie d'un fichier.
git pull origin main
# CONFLICT (content): Merge conflict in file.txt
# Automatic merge failed; fix conflicts and commit
Résoudre les conflits
- Identifier les fichiers en conflit
git status
- Ouvrir et éditer les fichiers
Le fichier contient :
<<<<<<< HEAD
Votre version
=======
Version du remote
>>>>>>> origin/main
- Choisir la bonne version (ou combiner)
Version finale après résolution
- Marquer comme résolu
git add file.txt
- Terminer le merge
git commit
# Git génère un message de merge automatiquement
Annuler en cas de problème
git merge --abort
# ou
git pull --abort
Outils visuels pour les conflits
git mergetool
🔝 Retour à la table des matières
6 - Workflows de synchronisation
Workflow solo
# Avant de travailler
git pull origin main
# Développer...
git add .
git commit -m "feat: nouvelle fonctionnalité"
# Pousser
git push origin main
Workflow équipe (feature branches)
# 1. Mettre à jour main
git checkout main
git pull origin main
# 2. Créer une feature branch
git checkout -b feature/ma-feature
# 3. Développer et commiter
git add .
git commit -m "feat: ma feature"
# 4. Pousser la branche
git push -u origin feature/ma-feature
# 5. Créer une Pull Request sur GitHub
# 6. Après merge, nettoyer
git checkout main
git pull origin main
git branch -d feature/ma-feature
Garder sa branche à jour
# Méthode 1 : Merge
git checkout feature/ma-feature
git fetch origin
git merge origin/main
# Méthode 2 : Rebase (historique plus propre)
git checkout feature/ma-feature
git fetch origin
git rebase origin/main