01 Qu'est-ce que GitHub ?
GitHub est la plus grande plateforme de collaboration autour de Git. Fondée en 2008 par Tom Preston-Werner, Chris Wanstrath, P.J. Hyett et Scott Chacon, elle est rachetée par Microsoft en 2018 pour 7,5 milliards de dollars. En 2024, GitHub héberge plus de 420 millions de dépôts et compte plus de 100 millions de développeurs.
Git (créé par Linus Torvalds en 2005) est un système de contrôle de version distribué fonctionnant localement. GitHub ajoute la couche distante : hébergement, collaboration, revue de code, automatisation, sécurité et API.
🗂 Hébergement Git
Dépôts publics illimités et gratuits. Dépôts privés disponibles pour tous les plans.
👥 Collaboration
Issues, pull requests, revues de code, commentaires en ligne, suggestions de code.
⚙️ Automatisation
GitHub Actions : CI/CD, tests, builds, déploiements, bots, scripts automatiques.
🔒 Sécurité
Dependabot, Secret Scanning, Code Scanning, SBOM, politique de sécurité.
02 Git — rappel des bases
GitHub est bâti sur Git. Comprendre Git est indispensable.
| Commande Git | Rôle |
|---|---|
| git init | Initialise un dépôt local dans le répertoire courant. |
| git clone <url> | Clone un dépôt distant en local (télécharge tout l'historique). |
| git status | Affiche l'état des fichiers (modifiés, staged, non suivis). |
| git add <fichier> | Ajoute un fichier à l'index (staging area) pour le prochain commit. |
| git commit -m "msg" | Crée un instantané versionné avec un message descriptif. |
| git push origin main | Envoie les commits locaux vers le remote "origin", branche "main". |
| git pull | Récupère et fusionne les changements du remote dans la branche locale. |
| git fetch | Récupère les changements du remote sans les fusionner. |
| git branch -b feat | Crée une nouvelle branche "feat". |
| git checkout feat | Bascule sur la branche "feat". |
| git merge feat | Fusionne la branche "feat" dans la branche courante. |
| git rebase main | Réapplique les commits de la branche courante sur main. |
| git log --oneline | Affiche l'historique compact des commits. |
| git stash | Sauvegarde temporairement les modifications non commitées. |
| git tag v1.0.0 | Crée un tag sur le commit courant. |
03 Concepts fondamentaux GitHub
📁 Repository
Contient tout le projet : code, historique Git, branches, issues, wiki, releases, actions, settings.
🔀 Commit
Instantané identifié par un hash SHA-1/SHA-256. Contient : auteur, date, message, diff, parent(s).
🌿 Branch
Pointeur mobile vers un commit. Permet le travail parallèle. main ou master est la branche principale.
🌐 Remote
Alias vers un dépôt distant. origin est le remote par défaut lors du clone.
🍴 Fork
Copie d'un dépôt dans son propre compte. Permet de contribuer sans accès direct au dépôt original.
🔄 Pull Request
Demande de fusion d'une branche vers une autre, avec diff, revue de code, statuts CI et commentaires.
🐛 Issue
Ticket de suivi : bug, amélioration, tâche, question. Lié aux PR, milestones, labels, projets.
🔖 Tag / Release
Tag Git figé sur un commit. Une release GitHub y ajoute notes, binaires et assets téléchargeables.
04 Cycle de travail complet
# 1. Cloner le dépôt git clone https://github.com/org/projet.git cd projet # 2. Créer une branche de travail git checkout -b feature/auth-oauth # 3. Développer et committer # (modifier les fichiers) git add . git commit -m "feat: add OAuth2 authentication with GitHub provider" # 4. Pousser la branche vers GitHub git push -u origin feature/auth-oauth # 5. Ouvrir une Pull Request sur GitHub # → Revue de code par les pairs # → CI automatique (GitHub Actions) # → Approbation required # → Merge dans main # 6. Mettre à jour sa branche locale git checkout main git pull origin main
feat/, fix/, docs/, refactor/, chore/. Les Conventional Commits standardisent aussi les messages de commit.05 Interface GitHub — sections détaillées
| Section | Contenu / Fonction |
|---|---|
| Code | Explorateur de fichiers, branches, tags, historique des commits, blame, recherche dans le code, clone (HTTPS/SSH), ZIP. |
| Issues | Tickets de bug/amélioration. Labels, assignees, milestones, templates, Reactions, liens vers PR, fermeture automatique. |
| Pull Requests | Diff de code, threads de revue, suggestions inline, statuts de checks CI, squash/rebase/merge, draft PR. |
| Actions | Workflows YAML CI/CD. Historique des runs, logs, artefacts, cache, market d'actions réutilisables. |
| Projects | Tableaux kanban ou listes de planification. Vues filtrables, liens avec issues et PR. |
| Wiki | Documentation complémentaire en Markdown. Modifiable directement sur GitHub ou en Git. |
| Security | Dependabot alerts, secret scanning, code scanning (CodeQL), politique SECURITY.md, advisories. |
| Insights | Statistiques de contributions, trafic du repo, fréquence de commit, réseau de forks, contributeurs. |
| Settings | Branches protégées, secrets, webhooks, deploy keys, pages GitHub, autolink, archivage, transfert. |
| Releases | Versions taguées avec notes de version, binaires, archives source générées automatiquement. |
| Packages | Hébergement de packages npm, Maven, NuGet, Docker, Composer directement sur GitHub. |
| Discussions | Forum communautaire intégré au repo. Catégories, votes, réponses marquées comme solutions. |
06 Gestion avancée des branches
Une stratégie de branches solide est essentielle sur les projets d'équipe.
Git Flow
Branches main, develop, feature/*, release/*, hotfix/*. Adapté aux releases versionées.
GitHub Flow
Simple : main + branches courtes + PR. Adapté au déploiement continu.
Trunk-Based
Tout sur main, feature flags pour cacher l'incomplet. Favorise l'intégration continue.
Branch Protection
Règles sur main : reviews obligatoires, CI verte requise, push direct interdit, force push bloqué.
# Configurer la protection de branche via GitHub CLI
gh api repos/{owner}/{repo}/branches/main/protection \
--method PUT \
--field required_status_checks='{"strict":true,"contexts":["ci/tests"]}' \
--field enforce_admins=true \
--field required_pull_request_reviews='{"required_approving_review_count":1}'
07 Pull Requests — guide complet
Une Pull Request est le cœur de la collaboration GitHub.
Modes de fusion
| Mode | Comportement | Quand l'utiliser |
|---|---|---|
| Merge commit | Crée un commit de merge. Préserve l'historique complet de la branche. | Projet avec historique explicite valorisé. |
| Squash & merge | Aplati tous les commits en un seul. Historique de main propre. | Branches expérimentales avec commits WIP. |
| Rebase & merge | Rejoue les commits sur main sans commit de merge. Historique linéaire. | Équipes qui préfèrent un log linéaire propre. |
Fixes #42 dans le corps de la PR ou d'un commit, GitHub ferme automatiquement l'issue #42 lors du merge.08 GitHub Actions — CI/CD
GitHub Actions permet de définir des pipelines d'automatisation en YAML dans .github/workflows/.
name: PHP CI / CD Pipeline on: push: branches: [main, develop] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest strategy: matrix: php-version: ['8.1', '8.2', '8.3'] steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: '${{ matrix.php-version }}' extensions: mbstring, pdo, opcache coverage: xdebug - name: Install dependencies run: composer install --prefer-dist --no-progress - name: Run PHPUnit run: vendor/bin/phpunit --coverage-text deploy: needs: test runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Deploy to production run: ./deploy.sh env: SERVER_KEY: ${{ secrets.DEPLOY_KEY }}
⚡ Triggers
push, pull_request, schedule (cron), workflow_dispatch (manuel), release, issue_comment…
🔧 Runners
Ubuntu, Windows, macOS. Runners hébergés par GitHub (gratuits) ou self-hosted (vos serveurs).
📦 Artefacts
Fichiers générés lors du build (rapports de tests, binaires, coverage HTML) stockés temporairement.
🔑 Secrets
Variables chiffrées (tokens, clés SSH, credentials) injectées en variables d'environnement dans les workflows.
09 Sécurité sur GitHub
| Fonctionnalité | Description |
|---|---|
| 2FA (MFA) | Authentification à deux facteurs. Obligatoire pour contribuer aux projets populaires depuis 2023. |
| SSH Keys | Authentification par clé publique pour push/pull sans mot de passe. |
| Fine-grained PAT | Personal Access Tokens granulaires : périmètre et durée limités. Remplace les tokens classiques. |
| GitHub Apps | Intégrations avec permissions précises par repo. Plus sécurisé que les tokens personnels. |
| Dependabot | Analyse automatique des dépendances vulnérables. Ouvre des PR de mise à jour automatiquement. |
| Secret Scanning | Détecte les secrets committés accidentellement (tokens, clés API). Alerte immédiate. |
| Code Scanning | Analyse statique CodeQL pour détecter des failles de sécurité dans le code source. |
| SBOM | Software Bill of Materials — inventaire des dépendances exportable (JSON, SPDX). |
| Branch Protection | Règles sur branches critiques : reviews, CI verte, signed commits, force push bloqué. |
| CODEOWNERS | Fichier définissant les reviewers obligatoires par répertoire ou type de fichier. |
10 Organisations, équipes et droits
GitHub supporte des comptes personnels et des organisations. Une organisation peut gérer des dizaines de dépôts avec des politiques centralisées.
| Niveau | Rôles disponibles |
|---|---|
| Organisation | Owner, Member, Outside Collaborator. Politiques SSO, IP allow list, audit log. |
| Équipe | Maintainer, Member. Les équipes ont des permissions sur un ou plusieurs repos. |
| Repository | Admin, Maintain, Write, Triage, Read. Granularité fine par dépôt. |
| Environment | Environments de déploiement (production, staging) avec reviewers obligatoires et secrets isolés. |
11 Releases, Tags et Packages
# Créer un tag annoté git tag -a v2.1.0 -m "Release v2.1.0 — ajout OAuth2" git push origin v2.1.0 # Créer une release via GitHub CLI gh release create v2.1.0 \ --title "v2.1.0 — OAuth2 & performance improvements" \ --notes-file CHANGELOG.md \ --generate-notes \ dist/app-linux.tar.gz
Les GitHub Packages permettent d'héberger des packages directement sur GitHub :
12 API REST et GraphQL
# Lister les repos d'une organisation curl -H "Authorization: token VOTRE_TOKEN" \ https://api.github.com/orgs/microsoft/repos # Créer une issue via API REST curl -X POST \ -H "Authorization: token VOTRE_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"Bug: login redirect","body":"Détails...","labels":["bug"]}' \ https://api.github.com/repos/owner/repo/issues
GraphQL
# Requête GraphQL pour lister des PR ouvertes query { repository(owner: "owner", name: "repo") { pullRequests(first: 10, states: OPEN) { nodes { title number author { login } createdAt reviews(first: 3) { nodes { state author { login } } } } } } }
https://api.github.com/graphql. Elle permet des requêtes précises et économise les appels comparé à la REST API.13 GitHub CLI, Desktop & Codespaces
# GitHub CLI — exemples utiles gh auth login # Authentification gh repo create mon-projet --public # Créer un repo gh pr create --title "feat: login" --body "..." # Ouvrir une PR gh pr list --state open # Lister les PR gh pr merge 42 --squash # Merger la PR #42 gh issue create --title "Bug: crash" # Créer une issue gh issue list --label bug # Filtrer les issues gh release create v1.0.0 # Créer une release gh run list # Lister les Actions runs gh run watch # Surveiller le run en cours
🖥 GitHub Desktop
Application GUI pour macOS et Windows. Gestion visuelle des commits, branches, diffs. Idéal pour débutants.
☁️ Codespaces
IDE VS Code dans le navigateur, lié au dépôt. Environnement préconfiguré via devcontainer.json. Facturation à l'usage.
📝 GitHub.dev
Ouvrir n'importe quel repo dans VS Code web en appuyant sur . sur GitHub. Lecture et édition légère gratuite.
🤖 GitHub Copilot
IA de complétion de code intégrée à VS Code, JetBrains, Neovim. Suggestions contextuelles basées sur le code du dépôt.
14 GitHub Pages & Documentation
GitHub Pages permet d'héberger gratuitement un site statique depuis un dépôt GitHub :
# Activer GitHub Pages depuis la branche gh-pages # Settings → Pages → Source: Deploy from branch # Exemple de workflow pour déployer avec Jekyll ou mkdocs name: Deploy Docs on: push: { branches: [main] } jobs: deploy: permissions: { pages: write, id-token: write } environment: { name: github-pages, url: ${{ steps.deploy.outputs.page_url }} } steps: - uses: actions/checkout@v4 - uses: actions/configure-pages@v4 - uses: actions/upload-pages-artifact@v3 with: { path: ./docs } - id: deploy uses: actions/deploy-pages@v4
15 Bonnes pratiques Git & GitHub
✏️ Commits atomiques
Un commit = une chose. Petits commits ciblés avec message clair en Conventional Commits.
🌿 Branches courtes
Branche de courte durée, fusionnée rapidement. Évite les grosses divergences et les conflits douloureux.
📋 PR descriptive
Contexte, liens vers issues, captures d'écran si besoin, liste des changements, comment tester.
🤝 Code review
Revue bienveillante : suggestions, pas d'ordres. Relire le diff, tester localement si possible.
🔐 Secrets
Jamais de token, clé ou mot de passe dans le code. Toujours utiliser les GitHub Secrets pour les workflows.
📂 .gitignore
Exclure les fichiers locaux : vendor/, node_modules/, .env, *.log, fichiers de build.
16 Pièges fréquents
| Piège | Cause | Solution |
|---|---|---|
| Confondre Git et GitHub | Git = outil local. GitHub = service cloud. | Git fonctionne sans internet. GitHub nécessite Git. |
| Committer sur main directement | Pas de règle de protection configurée. | Activer branch protection + PR obligatoire. |
| Secrets dans le code | Habitude de tout committer. | Toujours utiliser .env + .gitignore + GitHub Secrets. |
| Grosse PR illisible | Travail trop long sans fusion intermédiaire. | PR petites et fréquentes. Feature flags pour le WIP. |
| Force push sur main | Réécriture de l'historique partagé. | Bloquer force push via branch protection. |
| Conflits de merge ignorés | Mauvaise compréhension des marqueurs de conflit. | Résoudre proprement avec un bon outil de diff. |
| Token global sans expiration | Usage des anciens PAT sans restrictions. | Utiliser les fine-grained tokens avec expiration. |
17 Résumé
GitHub est à la fois un hébergeur de code, une plateforme de collaboration et une usine d'automatisation. Son cœur est Git, mais sa valeur réelle vient de l'intégration fluide entre dépôt, revue de code, issues, CI/CD (Actions), sécurité (Dependabot, Secret Scanning), documentation (Pages, Wiki) et API programmable.