Description
Git-Sync est un service léger qui clone et met à jour périodiquement une liste de dépôts Git vers un dossier local ou un volume. C'est volontairement simple : pas d'UI, pas de base de données, juste un fichier de configuration et un cron interne qui fait git clone / git pull en boucle.
L'idée : vous avez des dépôts critiques (configs, dotfiles, wikis, code personnel) hébergés sur GitHub, GitLab.com ou un GitLab self-hosted / Gitea et vous voulez une copie locale à jour sur votre NAS, en cas de :
- ✅ Perte d'accès au compte GitHub (compte suspendu, 2FA perdu, org supprimée)
- ✅ Suppression accidentelle d'un dépôt (le
git push --forcede trop) - ✅ Besoin d'un miroir local pour restaurer rapidement sans dépendre d'Internet
- ✅ Archivage d'archives d'un projet avant qu'il ne disparaisse
- ✅ Multi-comptes : vous pouvez mixer GitHub.com + GitLab self-hosted + Gitea
- ✅ Notifications sur échec (Discord, Telegram, Slack via webhook)
- ✅ Mode miroir :
git clone --mirrorpour préserver toutes les branches et tags - ✅ Schedules : intervalle configurable par dépôt
- ✅ Léger : conteneur Node minimal (~50 Mo RAM)
- ✅ Logs structurés en JSON
Public cible : développeurs, admins système, homelabbers qui veulent un miroir local automatisé de leurs dépôts critiques sans écrire de cron maison.
Installation
Docker Compose
# docker-compose.yml
version: '3.8'
services:
git-sync:
image: ghcr.io/akashrajpurohit/git-sync:latest
container_name: git-sync
restart: unless-stopped
volumes:
- ./repos:/repos # Miroirs locaux
- ./config.yaml:/app/config.yaml:ro
environment:
- TZ=Europe/Paris
- CONFIG_PATH=/app/config.yaml
labels:
- "traefik.enable=false" # Pas d'UI : pas besoin d'exposer en HTTPS
volumes:
repos:
ℹ️ Git-Sync n'expose pas d'UI web : tout se passe via le fichier
config.yamlet les logs. Pas besoin de le mettre derrière Traefik.
Configuration
Préparer un fichier
config.yamllistant vos dépôts :repos: - name: mon-dotfiles url: https://github.com/Velli/dotfiles.git interval: 3600 # sync toutes les heures mirror: true - name: wiki url: https://gitlab.example.com/root/wiki.git interval: 86400 # sync quotidienneGénérer un token (GitHub PAT, GitLab token) si vos dépôts sont privés.
Monter le dossier
repos/sur un volume persistant (sinon tout part au reboot).Démarrer :
docker compose up -dpuisdocker logs -f git-syncpour vérifier le premier clone.Ajouter une notification (optionnel) : webhook Discord/Slack dans la config pour être alerté en cas d'échec.
Programmer un test : simuler un repo supprimé en local et vérifier que le miroir contient bien les derniers commits.
Alternatives
Open Source
- Gitea mirror — fonctionnalité native de Gitea, plus complet mais nécessite Gitea.
- git-mirror (gogs/gogs) — script Python minimaliste.
- GitLab Pull Mirror — natif si vous avez une instance GitLab self-hosted.
- restic / borg sur les dossiers clonés — pour chiffrer et dédupliquer les miroirs.
- [[app-gitsave]] — autre outil dédié à la sauvegarde de repos Git, avec UI web.
Comparaison Git-Sync vs autres
| Critère | Git-Sync | GitSave | Gitea Mirror | git-mirror |
|---|---|---|---|---|
| UI web | ❌ | ✅ | ✅ | ❌ |
| Config | YAML | YAML/Web | UI | CLI |
| Notifications | Webhook | Oui | Oui | ❌ |
| Multi-provider | ✅ | ✅ | Gitea only | ✅ |
| Légèreté | Très léger | Moyen | Lourd | Léger |
| Lissage | Cron interne | Schedules | Schedules | Cron externe |
Verdict : Git-Sync est le plus simple et le plus léger des outils de mirroring Git. Si vous voulez une UI web ou des fonctionnalités plus poussées, voir [[app-gitsave]].
Propriétaires
- GitHub Pro backup — pas de backup officiel proposé par GitHub (à part le local clone).
- GitLab Premium — mirror features intégrées mais self-hosted uniquement en EE.
- BackHub — service commercial de backup GitHub (non self-hosted).
Sécurité
- Règle 3-2-1 : vos miroirs Git-Sync ne sont qu'une copie locale. Combinez avec [[app-restic]] / [[app-borg]] / [[app-kopia]] qui chiffreront et envoieront ces miroirs vers un S3 / B2 / SFTP distant.
- Chiffrement : les dépôts sont stockés en clair sur disque. Si vos dépôts contiennent des secrets historiques, chiffrez le volume
repos(LUKS / ZFS) ou compressez-chiffrez via un [[app-restic]] par-dessus. - Tokens d'accès : passez-les via variables d'environnement ou un fichier
.env, jamais en clair dansconfig.yamlversionné. Voir [[securisation-home-lab]]. - Test de restauration : clonez manuellement un de vos miroirs sur une autre machine tous les trimestres pour valider qu'ils sont bien à jour.

