GitHub Non È Un Backup
Non che github vada in down, anche se può succedere, come può succedere che l’account venga bloccato. TUtto può capitare, anche di cancellare la repo per sbaglio. Sull’onda di sbattimenti che altri miei amici hanno, ho pensato perché non mettere in piedi una logica molto semplice; un programmino che legga le tue repo su github (sì sono un fanboy) e le tiri tutte giù, o almeno una parte, magari a cron. Il progetto è ancora in… progettazione, ma penso di metterlo a terra entro fine anno.
GitBackup: Setup in 60 Secondi
One-liner install: uno scriptino che scarica l’install e fa le due o tre domande necesarie per far partire il backup.
curl -sSL https://raw.githubusercontent.com/giobi/gitbackup/main/install.sh | bash
Cosa fa:
- Clone repo gitbackup nella directory scelta
- Setup interattivo (GitHub token + opzionale Telegram)
- Configura cron per backup automatico (default 2am daily)
- Esegue primo backup immediatamente
Dopo 60 secondi: Hai tutte le tue repo GitHub clonate localmente + cron attivo.
Features
1. Clone o Pull Automatico
Per ogni repo nel tuo account GitHub:
- Se non esiste localmente → clone
- Se esiste → pull (aggiorna)
✅ Cloned: giobi/circus (new repo)
✅ Pulled: giobi/sgravoquest (already existed)
✅ Pulled: giobi/innesto (already existed)
2. Storage Tracking
📊 Storage Report:
Total: 2.3 GB
Largest repo: circus (1.1 GB)
⚠️ Large repos (>500 MB):
- circus: 1.1 GB
- giobicom: 687 MB
Sai quanto spazio serve per i backup, quali repo sono gonfie.
3. Stale Repos Detection
Se siete come me o anche peggio ci sono decine di repository che vengono dimenticati e rimangono lì, non ha un gran senso stare ad aggiornarle continuamente probabilmente.
⏰ Stale repos (no commits in 6+ months):
- old-project (last commit: 2024-03-15)
- archived-site (last commit: 2023-11-20)
4. Telegram Notifications (Opzionali)
🔄 GitBackup started
Repos found: 42
✅ GitBackup completed
Cloned: 2 new repos
Updated: 40 repos
Failed: 0
Total size: 2.3 GB
Duration: 3m 24s
Sono fan della facilità con cui è possibile fare un bot telegram, ne abuso per diversi tipi di notifiche.
È opzionale durante setup.sh, basta bot token + chat ID.
5. Logging Completo
cat logs/gitbackup.log
[2025-11-16 02:00:01] Backup started
[2025-11-16 02:00:02] Found 42 repositories
[2025-11-16 02:00:05] ✅ circus: pulled (3 new commits)
[2025-11-16 02:00:08] ✅ sgravoquest: pulled (up to date)
...
[2025-11-16 02:03:25] Backup completed: 42 repos, 2.3 GB
Utile per debug, per capire cosa è successo durante backup notturno. Non è così divertente quando qualcosa non funziona e non sai perché.
Setup Interattivo
Lo script setup.sh ti chiede:
- GitHub Token (obbligatorio)
- Crea su https://github.com/settings/tokens
- Scope richiesto:
repo(full control)
-
GitHub Username (default: dedotto da token)
-
Backup Directory (default:
./backup) -
Telegram Bot Token (opzionale - premi Enter per skip)
-
Telegram Chat ID (opzionale)
- Cron Schedule (default:
0 2 * * *= 2am daily)
Genera env.json con permessi 600 (solo tu puoi leggerlo).
Security: Token GitHub NON committato in Git (.gitignore).
Backup Manual Run
Puoi anche scegliere di lanciare il backup a mano, ovviamente.
cd /home/web/gitbackup
./backup.sh
Output:
🔄 GitBackup - Manual Run
📂 Backup directory: /home/web/gitbackup/backup
🔍 Fetching repositories...
Found 42 repositories
✅ circus: pulled (3 new commits)
✅ sgravoquest: up to date
✅ innesto: up to date
...
📊 Storage Report:
Total: 2.3 GB
Largest: circus (1.1 GB)
✅ Backup completed in 3m 24s
Restore da Backup
Il lato davvero utile, oltre a sapere che la tua roba rimane salvata in diversi posti del mondo, è poterla ripristinare.
Scenario: Hai cancellato per sbaglio repo myproject da GitHub.
Restore:
cd /home/web/gitbackup/backup/myproject
git remote -v
# origin https://github.com/giobi/myproject.git (fetch)
# Ricrea repo su GitHub, poi:
git push origin main --force
Fatto: Repo ripristinata completamente.
Dipendenze
Praticamente nessuna. Serve solo:
- ✅ Bash
- ✅ Git
- ✅ cURL (per setup one-liner)
- ✅ jq (per parsing JSON GitHub API)
Installazione jq (se manca):
# Debian/Ubuntu
sudo apt install jq
# macOS
brew install jq
Cost & Performance
Teniamo presente che github ha un throttle di richieste, e per questo può avere senso sfasare i backup in orari diversi.
GitHub API Rate Limit: 5000 requests/hour (autenticato).
Stima:
- 50 repos × 2 requests/repo = 100 requests
- Tempo: ~3-5 minuti per 50 repos
- Network: dipende da dimensione repos (primo clone pesante, poi solo delta)
Storage needed:
- Esempio: 42 repos, totale 2.3 GB
- Consigliato: SSD con almeno 5-10 GB free per crescita
Comparison: GitBackup vs Alternative
| Tool | GitBackup | BackHub | Duplicati |
|---|---|---|---|
| Setup | 60 secondi one-liner | Account paid | Config complessa |
| Cost | FREE | $7/mese | FREE |
| Dependencies | Bash + Git + jq | SaaS | GUI app |
| Automation | Cron native | Cloud schedule | App schedule |
| Telegram | ✅ Built-in | ❌ | ❌ |
| Open Source | ✅ | ❌ | ✅ |
Verdict: GitBackup per chi vuole soluzione self-hosted, zero-cost, minimal dependencies.
Future Enhancements
Possibili feature future (PR welcome):
- Git LFS auto-detection + pull automatico
- Submodules support con
--recursive - Cloud sync opzionale (S3, Google Drive, Dropbox)
- Healthchecks.io integration per monitoring uptime
Source & Docs
GitHub: https://github.com/giobi/gitbackup
License: MIT
Next step: Prova l’installer, lascia feedback su GitHub Issues. 🚀