142 lines
6.3 KiB
Markdown
142 lines
6.3 KiB
Markdown
---
|
||
title: Git-Sync
|
||
created: 2026-06-07
|
||
updated: 2026-06-07
|
||
type: app
|
||
tags: [catalogue, backups, git, github, gitlab, typescript, mit]
|
||
confidence: high
|
||
contested: false
|
||
sources: [https://selfh.st/apps/?tag=Backups, https://github.com/AkashRajpurohit/git-sync]
|
||
---
|
||
|
||
# 💾 Git-Sync
|
||
|
||
> **Le « cron + git push » clé en main** : sauvegardez automatiquement vos dépôts GitHub, GitLab, Gitea sur un intervalle régulier, sans script maison.
|
||
|
||
## 📋 Informations Générales
|
||
|
||
| Champ | Valeur |
|
||
| :--- | :--- |
|
||
| **Site web** | (GitHub) |
|
||
| **GitHub** | [AkashRajpurohit/git-sync](https://github.com/AkashRajpurohit/git-sync) |
|
||
| **License** | MIT |
|
||
| **Langage** | TypeScript (Node.js) |
|
||
| **Étoiles GitHub** | 696 ⭐ |
|
||
| **Dernière MAJ** | 2026-06-07 |
|
||
| **Catégorie** | [[cat-backups|Backups]] |
|
||
|
||
## 📝 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 --force` de 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 --mirror` pour 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
|
||
|
||
```yaml
|
||
# 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.yaml` et les logs. Pas besoin de le mettre derrière Traefik.
|
||
|
||
## ⚙️ Configuration Initiale
|
||
|
||
1. **Préparer un fichier `config.yaml`** listant vos dépôts :
|
||
|
||
```yaml
|
||
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 quotidienne
|
||
```
|
||
|
||
2. **Générer un token** (GitHub PAT, GitLab token) si vos dépôts sont privés.
|
||
3. **Monter le dossier `repos/`** sur un volume persistant (sinon tout part au reboot).
|
||
4. **Démarrer** : `docker compose up -d` puis `docker logs -f git-sync` pour vérifier le premier clone.
|
||
5. **Ajouter une notification** (optionnel) : webhook Discord/Slack dans la config pour être alerté en cas d'échec.
|
||
6. **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 dans `config.yaml` versionné. 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.
|
||
|
||
## 📚 Ressources
|
||
|
||
- [GitHub AkashRajpurohit/git-sync](https://github.com/AkashRajpurohit/git-sync)
|
||
- [Documentation configuration](https://github.com/AkashRajpurohit/git-sync#configuration)
|
||
|
||
## Pages Liées
|
||
- [[cat-backups]] — Catégorie Backups
|
||
- [[strategie-backup-321]] — Règle 3-2-1
|
||
- [[app-restic]] — Pour chiffrer et dédupliquer
|
||
- [[app-borg]] — Alternative à Restic
|
||
- [[app-kopia]] — Backup avec UI
|
||
- [[app-portainer]] — Gestion conteneurs
|
||
- [[securisation-home-lab]] — Bonnes pratiques sécurité
|