Git, GitHub & sauvegardes
Votre code mérite un filet. Git pour tout versionner, GitHub pour le mettre à l'abri et le partager, et une vraie stratégie de sauvegarde pour ne jamais rien perdre, même si la machine grille.
Sur cette fiche
Fiche vérifiée il y a 3 mois : certaines commandes ont pu changer. Signalez-le si c’est le cas.
En bref
Avant de laisser un agent écrire du code, versionnez tout avec Git et poussez une copie sur GitHub : chaque commit devient un point de restauration, et le code survit à la perte de la machine. Le plus simple pour relier le mini-PC à GitHub est la GitHub CLI (gh auth login, protocole SSH), avec un .gitignore écrit avant le premier commit pour ne jamais pousser de secret. Pour tout ce qui n'est pas dans Git (fichiers .env, bases, configs), appliquez la règle 3-2-1 avec restic, automatisez la sauvegarde et testez la restauration au moins une fois.
À faire avant : C'est quoi un agent IA ?
Vous venez de poser un agent qui va écrire du code à toute vitesse. Avant qu’il ne touche quoi que ce soit d’important, on installe le filet : Git, pour que chaque changement soit réversible, et GitHub, pour que votre travail vive ailleurs que sur ce seul petit boîtier. Parce qu’un mini-PC, ça peut griller, se faire voler, ou se prendre un rm de trop. Votre code, lui, ne doit jamais disparaître avec.
Pourquoi c’est non négociable (surtout avec un agent)
Un agent de code va vite, et il a confiance en lui. La plupart du temps c’est génial ; parfois il casse quelque chose. Git transforme ça en non-événement :
- Chaque commit est un point de restauration. L’agent a tout cassé ?
git restoreougit reset, et vous revenez à l’état d’avant en une seconde. C’est le « annuler » ultime. - Vous voyez exactement ce qui a changé.
git diffvous montre, ligne par ligne, ce que l’agent a touché. Vous relisez avant de valider, c’est le cœur du métier (voir Sécuriser les accès). - GitHub met votre code hors de portée des catastrophes. Disque mort, vol, fausse manip : votre code est sur GitHub, intact. Vous le récupérez sur n’importe quelle machine en une commande.
- Et vous pouvez partager. Donner accès à un collègue, bosser à plusieurs, ouvrir en open source : tout passe par GitHub.
Configurer Git sur la machine
Trois lignes, une fois pour toutes. Git a besoin de savoir qui vous êtes (ça signe vos commits) :
git config --global user.name "Ton Prénom Nom"
git config --global user.email "[email protected]"
# Quelques défauts sains
git config --global init.defaultBranch main # la branche par défaut s'appelle "main"
git config --global pull.rebase false # comportement de pull prévisible
Donner à la machine l’accès à GitHub
Votre machine doit prouver à GitHub qu’elle a le droit de pousser. Deux chemins ; prenez celui qui vous parle.
0 étape sur 2 faite Vos cases cochées restent dans ce navigateur.
-
Le plus simple : la GitHub CLI (gh)
L’outil officiel
ghgère l’authentification pour vous, jetons compris.# Installe gh depuis les dépôts d'Ubuntu sudo apt install -y gh # Connecte la machine à ton compte, réponds aux questions, ça ouvre un navigateur gh auth loginChoisissez « GitHub.com », puis « SSH » comme protocole :
ghgénère et installe la clé tout seul. À la fin, votre machine peut cloner, pousser, créer des dépôts. C’est l’option que je recommande pour démarrer.Le paquet d’Ubuntu a souvent plusieurs versions de retard (2.46 dans Ubuntu 26.04, quand GitHub publie la 2.102 au 1er octobre 2026). Ça suffit pour s’authentifier et pousser ; si une commande récente vous manque, installez
ghdepuis le dépôt officiel de GitHub. -
L'option manuelle : une clé SSH dédiée à la machine
Si vous préférez tout maîtriser, créez une clé SSH propre à ce mini-PC (une clé par machine, c’est plus sain) :
ssh-keygen -t ed25519 -C "mini-pc-github" cat ~/.ssh/id_ed25519.pub # copie ce qui s'afficheCollez la clé publique dans GitHub → Settings → SSH and GPG keys → New SSH key. Puis vérifiez :
ssh -T [email protected] # doit te saluer par ton pseudo GitHub
Votre premier dépôt, et l’agent qui s’en sert
cd ~/mon-projet
git init
# Le fichier qui dit à git quoi IGNORER, crucial
cat > .gitignore <<'EOF'
node_modules/
.env
*.log
dist/
EOF
git add -A
git commit -m "Premier jet"
# Crée le dépôt distant et pousse (avec gh, c'est une ligne)
gh repo create mon-projet --private --source=. --push
Une fois en place, demandez à votre agent de gérer git pour vous : « commits réguliers avec des messages clairs », « crée une branche pour cette fonctionnalité », « ouvre une pull request ». Vous pouvez même l’inscrire dans votre fichier mémoire : « commit après chaque étape validée, messages conventionnels, ne pousse sur main qu’avec mon accord. »
Les sauvegardes : la règle 3-2-1
GitHub sauve votre code. Mais votre mini-PC contient bien d’autres choses qui ne sont pas dans git : vos fichiers .env, vos bases de données, des données générées, des configs système. Pour celles-là, on applique la règle d’or de la sauvegarde :
0 étape sur 4 faite Vos cases cochées restent dans ce navigateur.
-
Décidez quoi sauvegarder
- Le code → déjà sur GitHub, rien à faire de plus.
- Les secrets (
.env, clés) → sauvegardez-les chiffrés, jamais en clair. - Les données qui comptent (bases, fichiers générés, configs maison).
- Pas les modèles Ollama ni
node_modules: ils se re-téléchargent, inutile de les sauvegarder.
-
Choisissez un outil et une destination
restic est l’outil idéal : sauvegardes chiffrées, dédupliquées, incrémentales. Vous l’envoyez vers un NAS, un autre disque, ou un stockage cloud.
sudo apt install -y restic # Initialise un dépôt de sauvegarde (ex: vers un NAS monté) restic -r /mnt/nas/backups init # Première sauvegarde restic -r /mnt/nas/backups backup ~/projets ~/configsrcloneest une excellente alternative pour viser un stockage cloud (chiffré côté client). -
Automatise, une sauvegarde manuelle finit toujours par s'oublier
Programmez un timer systemd ou une tâche
cronquotidienne. Votre agent sait écrire ça en deux minutes : demandez-lui « crée un service systemd qui lance ma sauvegarde restic chaque nuit à 3h ». -
TESTEZ votre restauration
Tant que vous ne l’avez jamais restaurée, votre sauvegarde reste un espoir. Faites l’exercice au moins une fois :
restic -r /mnt/nas/backups restore latest --target /tmp/test-restore, et vérifiez que vos fichiers sont bien là.
Trois pièges qu’on ne découvre qu’au moment de restaurer
Visez le disque par son étiquette, jamais par son chemin
Un disque externe ne se monte pas toujours au même endroit. Si le dossier existe déjà, votre bureau ajoute un chiffre et monte sur /media/vous/1TB1, en laissant /media/vous/1TB derrière lui sous forme de dossier vide sur le disque système.
Le test naïf [ -d "$DEST" ] passe très bien. Et votre sauvegarde part tranquillement sur le disque système en croyant écrire sur l’externe.
# on résout par l'étiquette, et on exige un vrai point de montage
DEST="$(findmnt -rn -S LABEL=1TB -o TARGET 2>/dev/null | head -1)"
[ -n "$DEST" ] && mountpoint -q "$DEST" \
|| { echo "SSD externe non monté, sauvegarde annulée"; exit 1; }
Une liste écrite en dur oublie les nouveaux venus
Un script qui énumère vos bases à la main ne sauvegarde jamais le projet que vous avez créé le mois dernier. Et il ne le dit pas. Balayez ce qui tourne réellement :
for c in $(docker ps --format '{{.Names}}'); do
# on sonde la présence de l'outil plutôt que le nom de l'image :
# ça attrape aussi pgvector, timescaledb et les autres dérivés
docker exec "$c" sh -c 'command -v pg_dumpall' >/dev/null 2>&1 || continue
docker exec "$c" pg_dumpall -U postgres | gzip > "$DEST/$c.sql.gz"
done
Une reconstruction destructive doit être atomique
Un script qui supprime la base puis la reconstruit vous laisse sans rien s’il meurt au milieu. Construisez à côté, puis renommez : sur un même système de fichiers, le renommage est atomique.
sqlite3 base.sqlite.tmp < schema.sql
# … remplissage …
mv base.sqlite.tmp base.sqlite # bascule instantanée, ou rien
Et avant la bascule, vérifiez : intégrité, nombre d’index, plancher de lignes. Une reconstruction qui aboutit à moitié passe sinon pour un succès.
Toutes les commandes de cette fiche
Questions fréquentes
Quelle est la différence entre Git et GitHub ?
Git est l'outil de versionnage qui tourne sur votre machine et enregistre l'historique de vos fichiers en local. GitHub est un service en ligne où vous poussez une copie de cet historique. Git sert de carnet de bord, GitHub de coffre-fort distant, et on a besoin des deux.
Comment revenir en arrière quand un agent de code a tout cassé ?
Si le travail est versionné avec Git, chaque commit est un point de restauration : git restore ou git reset ramène les fichiers à l'état d'avant en une seconde. Et avant de valider, git diff montre ligne par ligne ce que l'agent a touché.
Que faire si une clé API a été poussée sur GitHub ?
La considérer comme fuitée, même dans un dépôt privé : on la révoque et on en génère une nouvelle. Pour l'éviter, écrivez le fichier .gitignore, avec au moins .env et node_modules, avant le tout premier git add.
Faut-il sauvegarder les modèles Ollama et le dossier node_modules ?
Non, ils se re-téléchargent. Sauvegardez plutôt ce qui n'existe nulle part ailleurs : les fichiers .env et les clés, toujours chiffrés, les bases de données, les fichiers générés et les configurations maison. Le code, lui, est déjà sur GitHub.
Pourquoi une sauvegarde peut-elle échouer sans qu'on s'en aperçoive ?
Parce que certains pièges échouent sans bruit : un disque externe monté sous un autre nom laisse la sauvegarde partir sur le disque système, une liste de bases écrite en dur oublie les nouveaux projets, une reconstruction interrompue au milieu passe pour un succès. Visez le disque par son étiquette, balayez ce qui tourne réellement et construisez à côté avant de renommer.
Les termes de cette fiche : AgentGitCommitOpen source (vs open-weight)
Une erreur ?
Une commande ne marche plus, un prix a changé ?
Les outils bougent tous les mois. Dites-moi ce qui cloche dans cette fiche, je corrige et je redate.