À la fin de ce module, vous saurez :
- ✅ Créer un compte GitHub
- ✅ Créer et gérer des dépôts distants
- ✅ Cloner, pousser et tirer des modifications
- ✅ Collaborer avec d'autres développeurs
- ✅ Utiliser les pull requests
- ✅ Gérer les issues et projets
Format : Théorie + Pratique collaborative
GitHub est :
- 🌐 Service d'hébergement de dépôts Git
- 👥 Réseau social pour développeurs
- 🔧 Plateforme de collaboration
- 📦 Gestionnaire de projets
- 🤖 Plateforme CI/CD
Fonctionnalités principales :
- Hébergement de code (public/privé)
- Pull requests et code review
- Issues et gestion de projet
- GitHub Actions (CI/CD)
- GitHub Pages (hébergement web)
- Wikis et documentation
Alternatives : GitLab, Bitbucket, Gitea
Étapes :
- Aller sur https://github.com
- Cliquer sur "Sign up"
- Renseigner :
- Email (utilisez votre email étudiant)
- Mot de passe sécurisé
- Nom d'utilisateur unique
- Vérifier l'email
- Compléter le profil
Avantages étudiants :
- GitHub Student Developer Pack
- Dépôts privés illimités
- Outils premium gratuits
- https://education.github.com/
💡 Conseil : Choisissez un nom d'utilisateur professionnel
Pourquoi SSH ?
- Plus sécurisé que HTTPS
- Pas besoin de taper le mot de passe à chaque fois
- Recommandé pour un usage régulier
Générer une clé SSH :
# Générer la clé
ssh-keygen -t ed25519 -C "votre.email@example.com"
# Appuyer sur Entrée pour accepter l'emplacement par défaut
# Optionnel : entrer une passphrase
# Afficher la clé publique
cat ~/.ssh/id_ed25519.pubAjouter la clé à GitHub :
- Copier la clé publique
- GitHub → Settings → SSH and GPG keys
- New SSH key
- Coller la clé et sauvegarder
- cd ~/.ssh
- gedit config
- Copier/coller
Host github.com
HostName ssh.github.com
Port 443
Preferredauthentications publickey
IdentityFile /home_secours/secours/.ssh/id_ed25519# Tester la connexion
ssh -T git@github.com
# Résultat attendu :
# Hi username! You've successfully authenticated, but GitHub does not provide shell access.Si ça ne fonctionne pas :
- Vérifier que la clé est bien ajoutée sur GitHub
- Vérifier les permissions du fichier :
chmod 600 ~/.ssh/id_ed25519 - Consulter : https://docs.github.com/en/authentication
Via l'interface web :
- Cliquer sur "+" → "New repository"
- Renseigner :
- Repository name :
projet-arduino-dht22 - Description : "Station météo avec capteur DHT22"
- Public ou Private
- ✅ Add a README file
- ✅ Add .gitignore (choisir "Arduino")
- ✅ Choose a license (MIT recommandée)
- Repository name :
- Cliquer sur "Create repository"
Résultat : Dépôt créé avec URL
- HTTPS :
https://github.com/username/projet-arduino-dht22.git - SSH :
git@github.com:username/projet-arduino-dht22.git
Cloner avec SSH (recommandé) :
git clone git@github.com:username/projet-arduino-dht22.git
cd projet-arduino-dht22Cloner avec HTTPS :
git clone https://github.com/username/projet-arduino-dht22.git
cd projet-arduino-dht22Cloner dans un dossier spécifique :
git clone git@github.com:username/projet.git mon-dossierQue se passe-t-il ?
- Téléchargement de tout l'historique
- Configuration automatique du remote "origin"
- Checkout de la branche par défaut
Voir les remotes :
git remote -v
# Résultat :
# origin git@github.com:username/projet.git (fetch)
# origin git@github.com:username/projet.git (push)Ajouter un remote :
git remote add origin git@github.com:username/projet.gitRenommer un remote :
git remote rename origin upstreamSupprimer un remote :
git remote remove originVoir les détails d'un remote :
git remote show originPush basique :
git push origin mainPremier push (définir upstream) :
git push -u origin main
# Ensuite, simplement : git pushPousser toutes les branches :
git push --all originPousser les tags :
git push --tagsForcer le push (
git push --force origin main
# Utiliser avec précaution !Pull basique :
git pull origin mainQue fait git pull ?
# git pull = git fetch + git merge
git fetch origin
git merge origin/mainPull avec rebase :
git pull --rebase origin main
# Évite les commits de mergeFetch seul (sans merge) :
git fetch origin
# Télécharge les modifications sans les fusionner1. Cloner le dépôt
git clone git@github.com:user/projet.git
2. Créer une branche
git checkout -b feature-nouvelle-fonction
3. Faire des modifications
vim src/main.cpp
git add src/main.cpp
git commit -m "feat: Nouvelle fonction"
4. Pousser la branche
git push -u origin feature-nouvelle-fonction
5. Créer une Pull Request sur GitHub
6. Review et merge
7. Mettre à jour main localement
git checkout main
git pull origin main
8. Supprimer la branche
git branch -d feature-nouvelle-fonction
Fork :
- Copie d'un dépôt sur votre compte
- Permet de contribuer sans accès direct
- Bouton "Fork" sur GitHub
Workflow de contribution :
# 1. Fork le projet sur GitHub
# 2. Cloner votre fork
git clone git@github.com:votre-username/projet.git
# 3. Ajouter le dépôt original comme remote
git remote add upstream git@github.com:original-owner/projet.git
# 4. Créer une branche
git checkout -b fix-bug-capteur
# 5. Faire des modifications et commit
git commit -am "fix: Correction du bug de lecture capteur"
# 6. Pousser vers votre fork
git push origin fix-bug-capteur
# 7. Créer une Pull Request sur GitHubQu'est-ce qu'une Pull Request ?
- Demande d'intégration de modifications
- Permet la revue de code
- Discussion et collaboration
- Tests automatiques (CI)
Créer une PR :
- Pousser votre branche sur GitHub
- Aller sur le dépôt GitHub
- Cliquer sur "Pull requests" → "New pull request"
- Sélectionner les branches (base ← compare)
- Remplir :
- Titre descriptif
- Description détaillée
- Références aux issues (#123)
- Créer la PR
Bonnes pratiques :
- Une PR = une fonctionnalité
- Description claire
- Tests passants
- Code review avant merge
Rôles :
- Auteur : Crée la PR
- Reviewer : Examine le code
- Maintainer : Décide du merge
Processus :
- Reviewer examine le code
- Laisse des commentaires
- Demande des modifications si nécessaire
- Approuve ou rejette
- Maintainer merge
Types de commentaires :
- 💬 Comment : Discussion
- ✅ Approve : Validation
- 🔄 Request changes : Modifications nécessaires
Bonnes pratiques :
- Être constructif
- Expliquer le "pourquoi"
- Proposer des solutions
- Respecter le travail des autres
Qu'est-ce qu'une Issue ?
- Ticket de bug
- Demande de fonctionnalité
- Question ou discussion
- Tâche à accomplir
Créer une Issue :
- Onglet "Issues" → "New issue"
- Remplir :
- Titre clair
- Description détaillée
- Labels (bug, enhancement, question)
- Assignees (responsables)
- Milestone (version cible)
- Soumettre
Template d'issue pour bug :
## Description
Brève description du bug
## Étapes pour reproduire
1. Étape 1
2. Étape 2
3. Étape 3
## Comportement attendu
Ce qui devrait se passer
## Comportement actuel
Ce qui se passe réellement
## Environnement
- OS : Windows 10
- Version : 1.2.3
- Hardware : Arduino UnoLabels courants :
- 🐛
bug: Quelque chose ne fonctionne pas - ✨
enhancement: Nouvelle fonctionnalité - 📝
documentation: Amélioration de la doc - ❓
question: Question - 🚀
priority:high: Priorité haute - 👍
good first issue: Bon pour débutants
Milestones :
- Regroupement d'issues
- Objectif de version (v1.0, v2.0)
- Suivi de progression
- Date limite
Projects :
- Tableau Kanban
- Colonnes : To Do, In Progress, Done
- Vue d'ensemble du projet
Objectif : Créer un dépôt et pousser du code
# 1. Créer un dépôt sur GitHub (via l'interface web)
# Nom : mon-premier-projet-github
# 2. Cloner le dépôt
git clone git@github.com:votre-username/mon-premier-projet-github.git
cd mon-premier-projet-github
# 3. Créer un fichier
cat > main.ino << EOF
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
EOF
# 4. Commit et push
git add main.ino
git commit -m "feat: Ajout du code LED blink"
git push origin main
# 5. Vérifier sur GitHubTemps alloué : 15 minutes
Donner accès à un dépôt privé :
- Settings → Collaborators
- Add people
- Entrer le nom d'utilisateur GitHub
- Choisir le niveau d'accès :
- Read : Lecture seule
- Write : Lecture + écriture
- Admin : Tous les droits
Workflow d'équipe :
# Développeur A
git checkout -b feature-a
# ... modifications ...
git push origin feature-a
# Créer une PR
# Développeur B
git checkout -b feature-b
# ... modifications ...
git push origin feature-b
# Créer une PR
# Maintainer
# Review et merge des PRsSituation :
# Vous essayez de push
git push origin main
# Erreur :
# ! [rejected] main -> main (fetch first)
# Updates were rejected because the remote contains work that you do not have locally.Solution :
# 1. Récupérer les modifications distantes
git pull origin main
# 2. Résoudre les conflits si nécessaire
# (voir Module 2)
# 3. Pousser à nouveau
git push origin mainPrévention :
- Faire des
git pullrégulièrement - Communiquer avec l'équipe
- Utiliser des branches
Cas d'usage :
- Documentation de projet
- Portfolio
- Site de démonstration
- Blog technique
Activation :
- Settings → Pages
- Source : Deploy from a branch
- Branch : main, dossier : /docs ou /root
- Save
URL du site :
https://username.github.io/nom-du-depot/
Exemple pour documentation :
# Créer un dossier docs
mkdir docs
echo "# Documentation" > docs/index.md
# Commit et push
git add docs/
git commit -m "docs: Ajout de la documentation"
git push origin main
# Activer GitHub Pages sur la branche main, dossier /docsContenu recommandé :
# Nom du Projet
Description courte du projet
## 🎯 Objectif
Expliquer le but du projet
## 🔧 Matériel Requis
- Arduino Uno
- Capteur DHT22
- Résistance 10kΩ
## 📦 Installation
\`\`\`bash
git clone git@github.com:user/projet.git
cd projet
# Instructions d'installation
\`\`\`
## 🚀 Utilisation
\`\`\`cpp
// Exemple de code
\`\`\`
## 📸 Captures d'écran

## 🤝 Contribution
Les contributions sont les bienvenues !
## 📝 Licence
MIT LicenseExemples de badges :



Générateur : https://shields.io/
Créer un tag :
# Tag annoté (recommandé)
git tag -a v1.0.0 -m "Version 1.0.0 - Première release stable"
# Pousser le tag
git push origin v1.0.0
# Pousser tous les tags
git push --tagsCréer une Release sur GitHub :
- Releases → Create a new release
- Choisir un tag (ou en créer un)
- Titre : "Version 1.0.0"
- Description :
- Nouvelles fonctionnalités
- Corrections de bugs
- Breaking changes
- Attacher des fichiers (binaires, archives)
- Publish release
Versioning sémantique :
MAJOR.MINOR.PATCH(ex: 2.1.3)- MAJOR : Breaking changes
- MINOR : Nouvelles fonctionnalités
- PATCH : Corrections de bugs
Qu'est-ce que GitHub Actions ?
- Automatisation de workflows
- Tests automatiques
- Déploiement continu
- Compilation de firmware
Exemple simple (.github/workflows/test.yml) :
name: Test Arduino
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Compile Arduino sketch
uses: arduino/compile-sketches@v1
with:
fqbn: arduino:avr:uno
sketch-paths: |
- ./Avantages :
- Tests automatiques à chaque push
- Détection précoce des bugs
- Qualité du code garantie
Qu'est-ce qu'un Gist ?
- Petit bout de code partageable
- Peut être public ou secret
- Versionné avec Git
- Commentaires possibles
Créer un Gist :
- https://gist.github.com/
- Ajouter des fichiers
- Description
- Public ou Secret
- Create gist
Cas d'usage :
- Partager un exemple de code
- Configuration à partager
- Notes techniques
- Snippets réutilisables
Objectif : Travailler à deux sur un projet
Équipe de 2 personnes :
Personne A :
# 1. Créer un dépôt sur GitHub
# 2. Ajouter Personne B comme collaborateur
# 3. Créer un fichier et push
echo "// Code de A" > code_a.cpp
git add code_a.cpp
git commit -m "feat: Ajout code A"
git push origin mainPersonne B :
# 1. Cloner le dépôt
git clone git@github.com:personneA/projet.git
# 2. Créer une branche
git checkout -b feature-b
# 3. Ajouter du code
echo "// Code de B" > code_b.cpp
git add code_b.cpp
git commit -m "feat: Ajout code B"
# 4. Push et créer une PR
git push origin feature-bPersonne A :
- Review la PR de B
- Merge
Temps alloué : 20 minutes
Dépôts :
- ✅ README.md complet et à jour
- ✅ .gitignore approprié
- ✅ Licence claire (MIT, GPL, Apache)
- ✅ Description du projet
- ✅ Topics/tags pertinents
Commits et PRs :
- ✅ Messages de commit descriptifs
- ✅ PRs petites et focalisées
- ✅ Tests avant de merger
- ✅ Review de code systématique
Issues :
- ✅ Templates d'issues
- ✅ Labels organisés
- ✅ Réponses rapides
- ✅ Fermeture avec explication
Sécurité :
- ❌ Jamais de mots de passe dans le code
- ❌ Jamais de clés API en clair
- ✅ Utiliser les secrets GitHub
- ✅ .gitignore pour fichiers sensibles
Documentation officielle :
- https://docs.github.com/
- https://guides.github.com/
- https://lab.github.com/ (tutoriels interactifs)
Communauté :
- GitHub Community Forum
- Stack Overflow (tag: github)
- GitHub Blog
Outils :
- GitHub Desktop (GUI)
- GitHub CLI (
gh) - GitHub Mobile (app)
Pour étudiants :
- GitHub Student Developer Pack
- GitHub Campus Experts
- https://education.github.com/
✅ GitHub basics
- Créer un compte et configurer SSH
- Créer et gérer des dépôts
- Clone, push, pull
✅ Collaboration
- Fork et Pull Requests
- Review de code
- Gestion d'équipe
✅ Gestion de projet
- Issues et labels
- Milestones et projects
- Releases et tags
✅ Fonctionnalités avancées
- GitHub Pages
- GitHub Actions (intro)
- Gists
Points à clarifier ?
- Problèmes avec GitHub ?
- Questions sur les PRs ?
- Cas d'usage spécifiques ?
Prochaine étape : Module 4 - Pratiques Avancées et Cas d'Usage
Avant de continuer :
- Assurez-vous d'avoir un compte GitHub fonctionnel
- Testez clone/push/pull
- Créez un dépôt de test si nécessaire
Rendez-vous dans 10 minutes pour le Module 4 !
- Slides 1-11 : GitHub basics (20 min)
- Slides 12-16 : Collaboration (15 min)
- Slides 17-26 : Exercices et pratique (20 min)
- Slides 27-29 : Bonnes pratiques (5 min)
- Vérifier que tous ont un compte GitHub
- Aider avec la configuration SSH
- Montrer l'interface GitHub en live
- Faire des démos de PRs
- Créer une PR sur un projet réel
- Résoudre un conflit de merge
- Utiliser les issues pour organiser un projet
- Accès Internet stable
- Comptes GitHub créés
- Configuration SSH fonctionnelle