git remote — platform for collaborative development

GitHub — guide complet

Hébergement Git, collaboration, CI/CD, sécurité, API et automatisation — tout ce qu'un étudiant en informatique doit maîtriser sur GitHub.

Git Repository Branch Pull Request Actions CI/CD Releases API REST & GraphQL Codespaces

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 GitRôle
git initInitialise 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 statusAffiche 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 mainEnvoie les commits locaux vers le remote "origin", branche "main".
git pullRécupère et fusionne les changements du remote dans la branche locale.
git fetchRécupère les changements du remote sans les fusionner.
git branch -b featCrée une nouvelle branche "feat".
git checkout featBascule sur la branche "feat".
git merge featFusionne la branche "feat" dans la branche courante.
git rebase mainRéapplique les commits de la branche courante sur main.
git log --onelineAffiche l'historique compact des commits.
git stashSauvegarde temporairement les modifications non commitées.
git tag v1.0.0Cré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
💡 Nommage de branches : feat/, fix/, docs/, refactor/, chore/. Les Conventional Commits standardisent aussi les messages de commit.

05 Interface GitHub — sections détaillées

SectionContenu / Fonction
CodeExplorateur de fichiers, branches, tags, historique des commits, blame, recherche dans le code, clone (HTTPS/SSH), ZIP.
IssuesTickets de bug/amélioration. Labels, assignees, milestones, templates, Reactions, liens vers PR, fermeture automatique.
Pull RequestsDiff de code, threads de revue, suggestions inline, statuts de checks CI, squash/rebase/merge, draft PR.
ActionsWorkflows YAML CI/CD. Historique des runs, logs, artefacts, cache, market d'actions réutilisables.
ProjectsTableaux kanban ou listes de planification. Vues filtrables, liens avec issues et PR.
WikiDocumentation complémentaire en Markdown. Modifiable directement sur GitHub ou en Git.
SecurityDependabot alerts, secret scanning, code scanning (CodeQL), politique SECURITY.md, advisories.
InsightsStatistiques de contributions, trafic du repo, fréquence de commit, réseau de forks, contributeurs.
SettingsBranches protégées, secrets, webhooks, deploy keys, pages GitHub, autolink, archivage, transfert.
ReleasesVersions taguées avec notes de version, binaires, archives source générées automatiquement.
PackagesHébergement de packages npm, Maven, NuGet, Docker, Composer directement sur GitHub.
DiscussionsForum 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.

Branche source → cible Liste des commits Diff unifié Revue inline Checks CI Statuts de déploiement Suggestions de code Conversation résolue

Modes de fusion

ModeComportementQuand l'utiliser
Merge commitCrée un commit de merge. Préserve l'historique complet de la branche.Projet avec historique explicite valorisé.
Squash & mergeAplati tous les commits en un seul. Historique de main propre.Branches expérimentales avec commits WIP.
Rebase & mergeRejoue les commits sur main sans commit de merge. Historique linéaire.Équipes qui préfèrent un log linéaire propre.
ℹ️ Avec 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 KeysAuthentification par clé publique pour push/pull sans mot de passe.
Fine-grained PATPersonal Access Tokens granulaires : périmètre et durée limités. Remplace les tokens classiques.
GitHub AppsIntégrations avec permissions précises par repo. Plus sécurisé que les tokens personnels.
DependabotAnalyse automatique des dépendances vulnérables. Ouvre des PR de mise à jour automatiquement.
Secret ScanningDétecte les secrets committés accidentellement (tokens, clés API). Alerte immédiate.
Code ScanningAnalyse statique CodeQL pour détecter des failles de sécurité dans le code source.
SBOMSoftware Bill of Materials — inventaire des dépendances exportable (JSON, SPDX).
Branch ProtectionRègles sur branches critiques : reviews, CI verte, signed commits, force push bloqué.
CODEOWNERSFichier définissant les reviewers obligatoires par répertoire ou type de fichier.
⚠️ Ne jamais committer de secrets (tokens, mots de passe, clés privées) dans un repo, même privé. Utiliser les GitHub Secrets ou un gestionnaire de secrets externe (Vault, AWS Secrets Manager).

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.

NiveauRôles disponibles
OrganisationOwner, Member, Outside Collaborator. Politiques SSO, IP allow list, audit log.
ÉquipeMaintainer, Member. Les équipes ont des permissions sur un ou plusieurs repos.
RepositoryAdmin, Maintain, Write, Triage, Read. Granularité fine par dépôt.
EnvironmentEnvironments 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 :

npm (Node.js) Maven (Java) NuGet (.NET) RubyGems Docker / OCI Gradle Composer (PHP)

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 } }
        }
      }
    }
  }
}
ℹ️ L'API GraphQL GitHub est accessible sur 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ègeCauseSolution
Confondre Git et GitHubGit = outil local. GitHub = service cloud.Git fonctionne sans internet. GitHub nécessite Git.
Committer sur main directementPas de règle de protection configurée.Activer branch protection + PR obligatoire.
Secrets dans le codeHabitude de tout committer.Toujours utiliser .env + .gitignore + GitHub Secrets.
Grosse PR illisibleTravail trop long sans fusion intermédiaire.PR petites et fréquentes. Feature flags pour le WIP.
Force push sur mainRéécriture de l'historique partagé.Bloquer force push via branch protection.
Conflits de merge ignorésMauvaise compréhension des marqueurs de conflit.Résoudre proprement avec un bon outil de diff.
Token global sans expirationUsage 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.

✅ Maîtriser GitHub est une compétence professionnelle fondamentale en 2024. Presque tous les projets open source, startups et grandes entreprises l'utilisent comme plateforme centrale de développement logiciel.