---
title: GitSave
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, backups, git, github, gitlab, go, mit]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Backups, https://github.com/TimWitzdam/GitSave]
---

# 💾 GitSave

> **Le backup de dépôts Git avec une UI web** : planifiez la sauvegarde automatique de vos repos GitHub, GitLab ou Gitea et explorez-les depuis un navigateur.

## 📋 Informations Générales

| Champ | Valeur |
| :--- | :--- |
| **Site web** | (GitHub) |
| **GitHub** | [TimWitzdam/GitSave](https://github.com/TimWitzdam/GitSave) |
| **License** | MIT |
| **Langage** | Go |
| **Étoiles GitHub** | 312 ⭐ |
| **Dernière MAJ** | 2026-06-07 |
| **Catégorie** | [[cat-backups|Backups]] |

## 📝 Description

**GitSave** est, comme [[app-git-sync]], un **miroir automatisé de dépôts Git** — mais avec une **UI web** qui le distingue. Vous ajoutez vos dépôts, GitSave les clone (`git clone --mirror`) à intervalle régulier, et vous pouvez **consulter la liste des miroirs, leur date de dernière synchro, leur taille, et déclencher un refresh manuel** depuis le navigateur.

Cas d'usage typiques :

- ✅ **Sauvegarder ses propres projets** hébergés sur GitHub.com en local sur son NAS
- ✅ **Archiver des dépôts externes** qui pourraient disparaître (projets open source, wiki personnel, dotfiles d'un dev)
- ✅ **Miroir d'une instance Gitea / GitLab self-hosted** vers un autre serveur (DR)
- ✅ **Clone initial** automatique quand on ajoute un nouveau repo (pas besoin de cron manuel)
- ✅ **UI web** listant tous les repos backupés, leur état, leur dernière synchro
- ✅ **Planification** par repo (intervalle personnalisable, ou « on-demand only »)
- ✅ **Providers supportés** : GitHub, GitLab.com, GitLab self-hosted, Gitea, et tout ce qui parle Git+HTTP/SSH
- ✅ **Authentification** par token (PAT) ou clé SSH
- ✅ **Binaire Go statique** : déploiement trivial, conteneur léger (~20 Mo)

**Public cible** : utilisateurs qui veulent **voir leurs backups Git** sans aller fouiller dans un dossier de miroirs. La différence avec [[app-git-sync]] est essentiellement l'**UI web** et un peu plus de « features clés en main ».

## 🚀 Installation

### Docker Compose

```yaml
# docker-compose.yml
version: '3.8'
services:
  gitsave:
    image: ghcr.io/timwitzdam/gitsave:latest
    container_name: gitsave
    restart: unless-stopped
    ports:
      - "8080:8080"  # UI web
    volumes:
      - gitsave-data:/data
      - gitsave-config:/config
    environment:
      - TZ=Europe/Paris
      - GITSAVE_SECRET_KEY=changez-moi
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.gitsave.rule=Host(`gitsave.example.com`)"
      - "traefik.http.routers.gitsave.entrypoints=websecure"
      - "traefik.http.routers.gitsave.tls.certresolver=letsencrypt"

volumes:
  gitsave-data:
  gitsave-config:
```

## ⚙️ Configuration Initiale

1. **Démarrer** : `docker compose up -d`, puis `https://gitsave.example.com`.
2. **Créer le compte admin** au premier lancement.
3. **Ajouter une source** (Providers > Add) : par ex. GitHub.com, en collant un PAT (Personal Access Token) avec scope `repo`.
4. **Sélectionner les dépôts à sauvegarder** : soit tous, soit une sélection manuelle.
5. **Définir la fréquence** : par défaut toutes les 6h, modifiable par repo.
6. **Vérifier** : la page d'accueil doit afficher les miroirs avec leur date de dernière synchro ; tester une synchro manuelle sur un repo pour valider.

## 🔄 Alternatives

### Open Source
- [[app-git-sync]] — même usage, **sans UI**, plus minimaliste.
- **Gitea Mirror** — fonctionnalité native si vous avez Gitea.
- **GitLab Pull Mirror** — natif en EE.
- **restic / borg sur les dossiers clonés** — pour chiffrer et dédupliquer les miroirs une fois clonés.
- **OneDev** — plateforme DevOps avec mirror built-in.

### Comparaison GitSave vs autres

| Critère | GitSave | Git-Sync | Gitea Mirror | onefetch |
| :--- | :--- | :--- | :--- | :--- |
| UI web | ✅ | ❌ | ✅ | ❌ (CLI) |
| Setup | Très simple | Simple | Moyen | Simple |
| Multi-provider | ✅ | ✅ | Gitea only | N/A |
| Planification | ✅ | ✅ | ✅ | Manuel |
| Notifications | Webhook | Webhook | UI | ❌ |
| Léger | ✅ | Très léger | Lourd | ✅ |

**Verdict** : GitSave est **le choix par défaut** si vous voulez **une UI** pour visualiser vos backups Git. Si vous êtes à l'aise avec un fichier YAML et que vous n'avez pas besoin de voir un dashboard, [[app-git-sync]] est plus léger.

### Propriétaires
- **GitHub Pro/Enterprise backup** — pas de backup officiel, juste un export manuel.
- **BackHub** — service commercial de backup GitHub (cloud, hors self-hosted).
- **GitLab Premium** — mirror features intégrées.

## 🔐 Sécurité

- **Règle 3-2-1** : GitSave ne fait qu'**une copie locale** de vos dépôts. Combinez avec [[app-restic]] / [[app-borg]] / [[app-kopia]] pour chiffrer le dossier `gitsave-data` et l'envoyer vers un S3 / B2 / SFTP distant. Voir [[strategie-backup-321]].
- **Chiffrement** : les miroirs sont stockés **en clair** sur disque (dépôts Git bare classiques). Si vos dépôts contiennent des secrets historiques (anciens tokens commités, etc.), chiffrez le volume `gitsave-data` au niveau OS, ou chiffrez via un backup par-dessus.
- **Tokens d'accès** : stockez les PAT GitHub / GitLab dans les variables d'environnement ou le fichier de config de GitSave, pas en clair dans un compose versionné. Voir [[securisation-home-lab]].
- **Test de restauration** : tous les trimestres, clonez un de vos miroirs (`git clone /data/repos/myrepo.git`) sur une autre machine pour valider qu'il est cohérent et que `git fsck` est clean.

## 📚 Ressources

- [GitHub TimWitzdam/GitSave](https://github.com/TimWitzdam/GitSave)
- [Documentation](https://github.com/TimWitzdam/GitSave#readme)

## Pages Liées
- [[cat-backups]] — Catégorie Backups
- [[strategie-backup-321]] — Règle 3-2-1
- [[app-restic]] — Pour chiffrer les miroirs
- [[app-borg]] — Alternative à Restic
- [[app-kopia]] — Backup avec UI
- [[app-portainer]] — Gestion conteneurs
- [[securisation-home-lab]] — Bonnes pratiques
