Intégration Git
La synchronisation git bidirectionnelle de DocPlatform permet à votre équipe de travailler comme elle le préfère. Les rédacteurs techniques utilisent l’éditeur web. Les développeurs poussent depuis leur IDE. Tout le monde voit le même contenu.
Fonctionnement
┌─────────────┐
│ Web Editor │
│ (browser) │
└──────┬───────┘
│ save
▼
┌─────────────┐ ┌──────────────┐
│ Content │ commit │ Local Git │ push ┌──────────────┐
│ Ledger │ ───────► │ Repository │ ───────► │ Remote Repo │
│ │ │ (.git) │ │ (GitHub etc) │
└─────────────┘ └──────┬───────┘ └──────┬───────┘
▲ │ │
│ reconcile │ pull │
│ ┌──────▼───────┐ │
└──────────────── │ Sync Engine │ ◄───────────────┘
│ (polling / │ webhook / poll
│ webhook) │
└──────────────┘
Web → Git (sortant)
- Vous sauvegardez une page dans l’éditeur web
- Le Content Ledger écrit le fichier
.mdsur le disque - Le moteur git effectue un auto-commit :
docs: update {page-title} - Les commits sont poussés vers le dépôt distant
Git → Web (entrant)
- Quelqu’un pousse un commit vers le dépôt distant (depuis un IDE, la CI, etc.)
- Le moteur de synchronisation détecte le changement (polling ou webhook)
- Les modifications sont tirées vers le dépôt local
- Le Content Ledger effectue la réconciliation : système de fichiers → base de données → index de recherche
- Le WebSocket diffuse la mise à jour aux navigateurs connectés
Configuration
Connecter un dépôt distant
Lors de l’initialisation :
docplatform init \
--workspace-name "Docs" \
--slug docs \
--git-url [email protected]:your-org/docs.git \
--branch main
Après l’initialisation — modifiez la configuration de l’espace de travail :
# .docplatform/workspaces/{id}/.docplatform/config.yaml
git_remote: [email protected]:your-org/docs.git
git_branch: main
git_auto_commit: true
sync_interval: 300
Redémarrez le serveur ou déclenchez une synchronisation manuelle.
Authentification
SSH (recommandé)
Générez une clé de déploiement et ajoutez-la à votre dépôt :
ssh-keygen -t ed25519 -f ~/.ssh/docplatform_deploy_key -N ""
Définissez la variable d’environnement :
export GIT_SSH_KEY_PATH=~/.ssh/docplatform_deploy_key
Ajoutez la clé publique (~/.ssh/docplatform_deploy_key.pub) aux clés de déploiement de votre dépôt. Activez l’accès en écriture si vous souhaitez que DocPlatform pousse des commits.
HTTPS avec token
Pour les dépôts HTTPS, intégrez le token dans l’URL :
git_remote: https://x-access-token:[email protected]/your-org/docs.git
Ou utilisez un assistant d’identification Git configuré sur l’hôte.
Comportement de la synchronisation
Auto-commit
Lorsque git_auto_commit: true (par défaut), chaque sauvegarde dans l’éditeur web produit un commit git. Les modifications rapides dans un court intervalle sont regroupées en un seul commit.
Format du message de commit :
docs: update Getting Started
Edited via DocPlatform web editor
Author: [email protected]
Définissez git_auto_commit: false pour désactiver l’auto-commit. Dans ce mode, l’éditeur web écrit sur le système de fichiers mais ne crée pas de commits git — utile si vous souhaitez commiter manuellement ou selon un calendrier.
Polling
DocPlatform interroge le dépôt distant à l’intervalle configuré (par défaut : 300 secondes / 5 minutes). Ajustez avec :
sync_interval: 60 # check every minute
Des intervalles plus courts signifient une synchronisation plus rapide mais plus de trafic réseau.
Webhooks
Pour une synchronisation instantanée, configurez un webhook dans votre dépôt :
GitHub :
- Allez dans Settings → Webhooks → Add webhook
- URL du payload :
https://your-domain.com/api/v1/webhooks/github - Type de contenu :
application/json - Secret : Définissez la variable d’environnement
GIT_WEBHOOK_SECRETavec la même valeur - Événements : Sélectionnez Push events
GitLab :
- Allez dans Settings → Webhooks
- URL :
https://your-domain.com/api/v1/webhooks/gitlab - Token secret : Correspondant à
GIT_WEBHOOK_SECRET - Déclencheur : Push events
Bitbucket :
- Allez dans Repository settings → Webhooks → Add webhook
- URL :
https://your-domain.com/api/v1/webhooks/bitbucket - Déclencheurs : Repository push
Synchronisation manuelle
Déclenchez une synchronisation depuis l’interface web (Settings → Git → Sync Now) ou via l’API :
curl -X POST http://localhost:3000/api/v1/workspaces/{id}/sync \
-H "Authorization: Bearer {token}"
Résolution des conflits
Les conflits surviennent lorsque le même fichier est modifié à la fois dans l’éditeur web et via un push git entre deux intervalles de synchronisation.
Comment les conflits sont détectés
DocPlatform suit les hash de contenu (SHA-256) pour chaque page. Lors du pull des modifications distantes, il compare le hash entrant au hash local. Si les deux diffèrent de l’ancêtre commun, un conflit est déclaré.
Ce qui se passe en cas de conflit
- L’opération de sauvegarde ou de synchronisation renvoie HTTP 409 Conflict
- Les deux versions (locale et distante) sont préservées
- L’interface web affiche une bannière de conflit avec les options :
- Keep local — écarter la version distante
- Keep remote — écarter la version locale
- Download both — télécharger les deux fichiers pour une fusion manuelle
- Une branche de conflit (
conflict/{page-slug}-{timestamp}) est créée avec la version locale
Prévenir les conflits
- Utilisez des webhooks au lieu du polling — une synchronisation plus rapide réduit la fenêtre de conflit
- Attribuez la propriété des pages — un seul rédacteur par page réduit le risque de collision
- Utilisez l’éditeur web pour le contenu, l’IDE pour le code — séparation naturelle
- Intervalles de synchronisation courts —
sync_interval: 30dans les environnements à forte collaboration
Synchronisation par lot
Lorsqu’un push distant contient plus de 20 fichiers modifiés, DocPlatform bascule en mode par lot :
- Récupère tous les fichiers modifiés en un seul diff
- Acquiert des mutex par chemin pour tous les chemins concernés (triés pour éviter les deadlocks)
- Traite tous les fichiers en une seule transaction de base de données
- Invalide le cache de permissions une seule fois (pas par fichier)
- Émet un seul message WebSocket
bulk-syncavec le nombre total de modifications
Cela évite les tempêtes de notifications et la surcharge de la base de données lorsque des modifications importantes sont poussées (par ex. import initial de dépôt ou restructuration en masse).
Stockage des conflits
Lorsqu’un conflit est détecté, les deux versions sont stockées sur le disque :
.docplatform/conflicts/
└── {page-id}/
└── 20250115T103045Z/
├── ours.md # Local version (web editor)
└── theirs.md # Remote version (git push)
Les conflits persistent jusqu’à résolution explicite via l’interface web ou l’API. La commande docplatform doctor signale les conflits non résolus.
Détails du moteur git
DocPlatform utilise un moteur git hybride qui sélectionne automatiquement le meilleur backend :
| Condition | Moteur | Pourquoi |
|---|---|---|
| Moins de 5 000 fichiers | go-git (in-process) | Rapide, pas de dépendance externe, Go pur |
| Plus de 5 000 fichiers | Git CLI natif (sous-processus) | Meilleure gestion des gros dépôts, clones superficiels |
| RSS go-git > 512 Mo | Git CLI natif (repli) | Sécurité mémoire — prévient les OOM sur les gros dépôts |
Un pool de 4 workers concurrents gère les opérations git pour tous les espaces de travail. Chaque espace de travail a son propre mutex — les opérations sur des espaces de travail différents s’exécutent en parallèle, tandis que les opérations sur le même espace de travail sont sérialisées.
Les messages d’auto-commit utilisent ce format :
docs: update {page-title}
Edited via DocPlatform web editor
Author: [email protected]
Committer: DocPlatform <docplatform@local>
Travailler avec des dépôts existants
DocPlatform fonctionne avec les dépôts de documentation existants. Lorsque vous connectez un dépôt :
- Le dépôt est cloné (ou tiré s’il existe déjà localement)
- Tous les fichiers
.mddans le répertoiredocs/sont indexés - Le frontmatter est analysé et les métadonnées des pages sont stockées dans SQLite
- L’index de recherche est construit de manière incrémentale
Les fichiers en dehors de docs/ ne sont pas indexés ni affichés dans l’éditeur, mais ils restent dans le dépôt git sans être modifiés.
Importer depuis d’autres plateformes
DocPlatform fonctionne avec tout contenu Markdown. Voici comment migrer depuis les plateformes courantes :
| Source | Méthode d’export | Notes |
|---|---|---|
| Docusaurus | Copie directe | Déjà basé sur .md — copiez le répertoire docs/ tel quel, ajoutez le frontmatter si manquant |
| GitBook | Export JSON → conversion | Exportez via l’API GitBook, convertissez en Markdown |
| Notion | Export Markdown | Exportez l’espace de travail en Markdown, restructurez en hiérarchie docs/ |
| Confluence | Export HTML → conversion | Exportez les espaces en HTML, convertissez en Markdown avec pandoc ou similaire |
| Wiki.js | Export base de données | Exportez les pages en Markdown depuis le panneau d’administration |
Étapes générales de migration :
- Exportez votre contenu sous forme de fichiers Markdown
- Placez-les dans un dépôt git sous
docs/ - Ajoutez un frontmatter YAML (au minimum,
title) à chaque fichier - Connectez le dépôt à DocPlatform
- Exécutez
docplatform rebuildpour forcer une réconciliation complète
Le réconciliateur de DocPlatform découvre automatiquement tous les fichiers .md, analyse leur frontmatter, attribue des ULIDs aux pages sans champ id, et construit l’index de recherche.