Mettre un projet sous Git et le publier sur GitHub
De git init à un site live sur GitHub Pages : le parcours pas à pas
tiré d'un cas réel, pour transformer un dossier de fichiers en projet versionné
et publié en ligne.
À quoi ça sert
Tu as un projet local (un dossier avec du code, des fichiers HTML, des notebooks…) et tu veux :
- Versionner ton travail pour pouvoir revenir en arrière, suivre les évolutions, expérimenter sans casser.
- Sauvegarder ton projet ailleurs que sur ton seul PC.
- Partager avec d'autres (camarades de promo, formateurs, recruteurs).
- Publier un site statique gratuitement via GitHub Pages.
Cette fiche couvre exactement ce parcours : partir d'un dossier non versionné, et aboutir à un projet hébergé sur GitHub avec un site en ligne.
La fiche GitHub présente l'écosystème (Git, compte, SSH, commandes). Cette fiche-ci enchaîne les étapes concrètes pour publier un projet existant, dans l'ordre où tu les rencontres en pratique.
Un exemple d'usage
Tu as bossé une semaine sur un mini-site statique en local. Tu veux le partager avec ta promo et l'avoir en ligne. En une heure, tu peux :
- Initialiser Git dans le dossier (
git init). - Faire un premier commit qui capture l'état actuel.
- Créer un dépôt vide sur GitHub.
- Pousser ton commit vers ce dépôt.
- Activer GitHub Pages pour avoir une URL publique.
Le site est en ligne, ton code est versionné, et chaque modification future
se résume à add → commit → push.
How-to : du dossier local au site en ligne
Pré-requis : Git installé localement et un compte GitHub. Si ce n'est pas le cas, commence par la fiche GitHub.
-
Vérifier la cohérence du projet local
Avant de versionner, range. Si tu as renommé le dossier ou refactoré, vérifie qu'il ne reste pas de chemins cassés, de vieux liens vers un ancien nom, ou de fichiers orphelins. Une recherche rapide sur l'ancien nom suffit souvent à débusquer les incohérences.
Pourquoi maintenantMieux vaut corriger avant le premier commit que de polluer l'historique avec un commit "fix renommage" cinq minutes plus tard.
-
Créer un
.gitignoreadaptéLe
.gitignoreliste les fichiers et dossiers que Git doit ignorer. À créer avant le premiergit add, sinon tu risques de pousser des fichiers sensibles (secrets, env locaux) ou volumineux (caches, dépendances, données).Exemple de
.gitignorepolyvalent pour un projet qui peut évoluer :.gitignore# OS .DS_Store Thumbs.db # IDE .vscode/ .idea/ # Secrets & variables d'environnement .env .env.* !.env.example *.pem *.key # Python __pycache__/ *.py[cod] .venv/ venv/ .pytest_cache/ .mypy_cache/ .ruff_cache/ .ipynb_checkpoints/ # Node node_modules/ # Build / dist dist/ build/ # Données & modèles ML data/ models/ *.csv *.pkl mlruns/Si un fichier sensible est déjà commitéAjouter une ligne au
.gitignorene le retire pas de l'historique. Il faut désindexer (git rm --cached <fichier>) puis recommiter, et considérer le secret comme compromis (à régénérer). -
Créer un
README.mdminimalLe
READMEest la première chose qu'on voit sur la page GitHub du projet. Inutile d'écrire un roman pour démarrer : titre, une description courte, comment consulter, auteur. Ça suffit.markdown# <Mon projet> Description courte du projet en une phrase ou deux. ## Consultation - En ligne : https://<ton-pseudo>.github.io/<mon-projet>/ - En local : ouvrir `index.html` dans un navigateur ## Auteur <Ton nom ou pseudo> -
Initialiser Git dans le dossier
bashgit init git statusgit initcrée un sous-dossier.git/qui contient toute la mécanique du versioning (commits, branches, config locale). Tant que tu ne supprimes pas ce dossier, ton historique est conservé.git statusdoit déjà tenir compte de ton.gitignore: les fichiers ignorés n'apparaîtront pas dans la liste des fichiers non suivis. C'est ta première vérification que le filtre fonctionne. -
Renommer la branche par défaut
masterenmainSur les versions un peu anciennes de Git,
git initcrée une branchemaster. La convention GitHub depuis 2020 estmain. Le faire avant le premier commit évite tout renommage post-push.bashgit branch -m master main git branch --show-current # doit afficher : mainPour ne plus avoir à le faire dans tes futurs projets :
bashgit config --global init.defaultBranch main -
Indexer les fichiers (
git add) et vérifierbashgit add . git statusgit add .place tous les fichiers non ignorés dans la zone d'index (staging area).git statusliste alors les fichiers prêts à être commités.Le réflexe anti-fuiteAvant chaque commit, lis la liste de
git status. Aucun.env, aucun fichier de credentials, aucun dossier de config personnelle ne doit s'y trouver. Si oui :git rm --cached <fichier>et corrige le.gitignore. -
Configurer ton identité Git pour ce projet
Git refuse de créer un commit s'il ne sait pas qui tu es. Tu peux configurer l'identité au niveau global (tous tes projets) ou local (uniquement ce dépôt).
bash# Local : config limitée à ce dépôt git config --local user.name "<ton-pseudo>" git config --local user.email "<ton-email>" # Ou global : config partagée par tous tes dépôts git config --global user.name "<ton-pseudo>" git config --global user.email "<ton-email>"Email "noreply" GitHubPour ne pas exposer ton vrai e-mail dans les commits publics, GitHub fournit un alias du type
<id>+<ton-pseudo>@users.noreply.github.com(Settings → Emails → Keep my email addresses private). Les commits restent liés à ton profil GitHub mais ton email réel reste privé. -
Faire le premier commit
bashgit commit -m "Initial commit" git log --onelinegit log --onelinedoit te montrer une ligne avec le hash court du commit et son message. À ce stade, tout est versionné en local, rien n'est encore en ligne. -
Créer le dépôt distant sur GitHub
- Va sur github.com/new.
- Nom :
<mon-projet>(idéalement le même que ton dossier local). - Description : optionnelle.
- Visibilité : Public ou Private.
- Ne coche RIEN dans "Initialize this repository with…" (pas de README, pas de .gitignore, pas de license).
- Crée le dépôt.
Pourquoi un dépôt distant videSi GitHub crée automatiquement un README ou un .gitignore côté distant, ton historique local et l'historique distant seront divergents dès le départ, et ton premier
pushsera rejeté. En partant d'un dépôt distant vide, tu pousses simplement ton historique local tel quel. -
Connecter le local au distant et pousser
Ajoute l'URL du dépôt distant comme remote nommé
origin:bashgit remote add origin https://github.com/<ton-pseudo>/<mon-projet>.git git remote -v # vérifie l'URL fetch + push git push -u origin mainLe flag
-u(set upstream) lie ta branche localemainà la distanteorigin/main. À partir de là, un simplegit pushougit pullsaura quoi faire sans répéter les arguments. -
S'authentifier sans retaper le mot de passe à chaque push
Au moment du
push, GitHub te demande de t'authentifier. Le mot de passe classique n'est plus accepté depuis 2021. Plusieurs options :- OAuth via Git Credential Manager (GCM) — si GCM est installé sur ta machine (souvent le cas sur Windows et macOS modernes), une fenêtre de navigateur s'ouvre automatiquement pour t'authentifier sur GitHub. Le credential est ensuite stocké et réutilisé pour les pushes suivants. Le plus simple si disponible.
-
Personal Access Token (PAT) "fine-grained" — un token
limité à un seul dépôt et à des permissions précises. Tu le crées sur
github.com/settings/personal-access-tokens/new,
tu sélectionnes Only select repositories →
<mon-projet>, et tu donnes la permissionContents: Read and write. Quand Git demande le mot de passe, tu colles le token. Pour qu'il soit mémorisé localement (au repo seulement) :Le fichierbashgit config --local credential.helper 'store --file=.git/.git-credentials'.git/.git-credentialsreste dans.git/, qui n'est jamais poussé. - Clé SSH — couvert dans la fiche GitHub. Plus pérenne, pas de token en clair, idéal une fois maîtrisé.
PAT en clairLe credential helper
storeécrit ton token en clair dans le fichier. Sur un poste partagé ou sensible, préfère SSH ou GCM. Sur ton poste perso, c'est acceptable si le fichier reste protégé (permissions600par défaut). -
Bonus : activer GitHub Pages pour publier le site
Si ton projet est un site statique HTML/CSS/JS, GitHub peut l'héberger gratuitement.
- Sur la page du dépôt : Settings → Pages.
- Source : Deploy from a branch.
- Branch :
main, dossier :/ (root). - Save.
- Attends 1 à 2 minutes : l'URL
https://<ton-pseudo>.github.io/<mon-projet>/devient active.
Repo public ou privé ?GitHub Pages depuis un repo privé nécessite un compte payant. Mais pour un site statique, garder le repo en privé n'a qu'un intérêt limité : tout le code servi au navigateur est de toute façon visible (clic droit → Afficher le source). La mise en privé ne cache que l'historique, les drafts en branches et les fichiers non servis. Pour la plupart des cas pédagogiques, public + Pages est le plus simple.
Workflow quotidien après publication
Une fois le projet en ligne, chaque modification se résume à ce cycle :
git status # voir ce qui a changé
git add <fichier> # ou : git add .
git commit -m "docs: ajout lien live"
git push # plus besoin de -u
Les messages de commit gagnent à suivre une convention type
type: description (ex. feat:, fix:,
docs:, refactor:). Cohérent, lisible, et facilement
exploitable par des outils plus tard.
Aide-mémoire
# Initialisation
git init
git branch -m master main
git add .
git status
git commit -m "Initial commit"
# Identité (local au repo)
git config --local user.name "<ton-pseudo>"
git config --local user.email "<ton-email>"
# Connexion au distant
git remote add origin https://github.com/<ton-pseudo>/<mon-projet>.git
git remote -v
git push -u origin main
# Stockage du PAT local au repo
git config --local credential.helper 'store --file=.git/.git-credentials'
# Cycle quotidien
git status
git add .
git commit -m "message"
git push
# Vérifier l'état distant
git log --oneline
git ls-remote origin
Pour aller plus loin
- Documentation Git : git-scm.com/doc
- Pro Git (livre gratuit, en français) : git-scm.com/book/fr
- GitHub Pages : docs.github.com/fr/pages
- Personal Access Tokens : docs.github.com — gestion des PAT
- Conventional Commits : conventionalcommits.org