Aller au contenu principal

Synchronisation avec GitHub


Table des matières


  1. Les remotes Git
  2. Cloner un dépôt
  3. Git fetch vs git pull
  4. Git push
  5. Gestion des conflits
  6. Workflows de synchronisation
  7. 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

  1. Télécharge tout le dépôt
  2. Configure automatiquement origin
  3. Crée une branche locale main lié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

Aspectfetchpull
Télécharge
Applique
Sécurité✅ Plus sûr⚠️ Peut créer des conflits
ContrôleTotalAutomatique

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

  1. Identifier les fichiers en conflit
git status
  1. Ouvrir et éditer les fichiers

Le fichier contient :

<<<<<<< HEAD
Votre version
=======
Version du remote
>>>>>>> origin/main
  1. Choisir la bonne version (ou combiner)
Version finale après résolution
  1. Marquer comme résolu
git add file.txt
  1. 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

🔝 Retour à la table des matières



7 - Bonnes pratiques



✅ À faire

PratiquePourquoi
Pull avant de commencerÉviter les conflits
Push régulièrementSauvegarder le travail
Utiliser des feature branchesIsoler les changements
Vérifier avant pushgit status, git diff

❌ À éviter

PratiqueRisque
Force push sur mainPerte de travail d'équipe
Push sans pullConflits
Gros commits monolithiquesDifficile à review

Commandes de vérification

# Avant de pousser
git status
git log origin/main..HEAD # Commits à pousser
git diff origin/main # Différences

# Après fetch
git log HEAD..origin/main # Commits à récupérer

Résumé

CommandeDescription
git fetchTélécharger sans appliquer
git pullTélécharger et appliquer
git pushEnvoyer vers le remote
git push -u origin branchPremier push avec tracking
git push --force-with-leaseForce push sécurisé

🔝 Retour à la table des matières