Git-Integration
Die bidirektionale Git-Synchronisation von DocPlatform ermöglicht es Ihrem Team, so zu arbeiten, wie es bevorzugt wird. Technische Redakteure nutzen den Web-Editor. Entwickler pushen aus ihrer IDE. Alle sehen denselben Inhalt.
Wie es funktioniert
┌─────────────┐
│ 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 (ausgehend)
- Sie speichern eine Seite im Web-Editor
- Das Content Ledger schreibt die
.md-Datei auf die Festplatte - Die Git-Engine erstellt automatisch einen Commit:
docs: update {page-title} - Commits werden zum Remote-Repository gepusht
Git → Web (eingehend)
- Jemand pusht einen Commit zum Remote (aus IDE, CI usw.)
- Die Sync-Engine erkennt die Änderung (Polling oder Webhook)
- Änderungen werden zum lokalen Repository gepullt
- Das Content Ledger reconciliert: Dateisystem → Datenbank → Suchindex
- WebSocket sendet die Aktualisierung an verbundene Browser
Einrichtung
Remote-Repository verbinden
Während der Initialisierung:
docplatform init \
--workspace-name "Docs" \
--slug docs \
--git-url [email protected]:your-org/docs.git \
--branch main
Nach der Initialisierung — bearbeiten Sie die Workspace-Konfiguration:
# .docplatform/workspaces/{id}/.docplatform/config.yaml
git_remote: [email protected]:your-org/docs.git
git_branch: main
git_auto_commit: true
sync_interval: 300
Starten Sie den Server neu oder lösen Sie eine manuelle Synchronisation aus.
Authentifizierung
SSH (empfohlen)
Generieren Sie einen Deploy-Key und fügen Sie ihn Ihrem Repository hinzu:
ssh-keygen -t ed25519 -f ~/.ssh/docplatform_deploy_key -N ""
Setzen Sie die Umgebungsvariable:
export GIT_SSH_KEY_PATH=~/.ssh/docplatform_deploy_key
Fügen Sie den öffentlichen Schlüssel (~/.ssh/docplatform_deploy_key.pub) zu den Deploy-Keys Ihres Repositories hinzu. Aktivieren Sie den Schreibzugriff, wenn DocPlatform Commits pushen soll.
HTTPS mit Token
Für HTTPS-Repositories betten Sie den Token in die URL ein:
git_remote: https://x-access-token:[email protected]/your-org/docs.git
Oder verwenden Sie einen Git-Credential-Helper, der auf dem Host konfiguriert ist.
Synchronisationsverhalten
Auto-Commit
Wenn git_auto_commit: true (Standard), erzeugt jede Speicherung im Web-Editor einen Git-Commit. Schnelle Bearbeitungen innerhalb eines kurzen Zeitfensters werden zu einem einzelnen Commit zusammengefasst.
Commit-Nachrichtenformat:
docs: update Getting Started
Edited via DocPlatform web editor
Author: [email protected]
Setzen Sie git_auto_commit: false, um Auto-Commit zu deaktivieren. In diesem Modus schreibt der Web-Editor auf das Dateisystem, erstellt aber keine Git-Commits — nützlich, wenn Sie manuell oder nach Zeitplan committen möchten.
Polling
DocPlatform pollt das Remote-Repository im konfigurierten Intervall (Standard: 300 Sekunden / 5 Minuten). Anpassen mit:
sync_interval: 60 # jede Minute prüfen
Kürzere Intervalle bedeuten schnellere Synchronisation, aber mehr Netzwerkverkehr.
Webhooks
Für sofortige Synchronisation konfigurieren Sie einen Webhook in Ihrem Repository:
GitHub:
- Gehen Sie zu Settings → Webhooks → Add webhook
- Payload URL:
https://your-domain.com/api/v1/webhooks/github - Content type:
application/json - Secret: Setzen Sie die Umgebungsvariable
GIT_WEBHOOK_SECRETauf denselben Wert - Events: Wählen Sie Push events
GitLab:
- Gehen Sie zu Settings → Webhooks
- URL:
https://your-domain.com/api/v1/webhooks/gitlab - Secret token: Muss mit
GIT_WEBHOOK_SECRETübereinstimmen - Trigger: Push events
Bitbucket:
- Gehen Sie zu Repository settings → Webhooks → Add webhook
- URL:
https://your-domain.com/api/v1/webhooks/bitbucket - Triggers: Repository push
Manuelle Synchronisation
Lösen Sie eine Synchronisation über die Web-Oberfläche aus (Settings → Git → Sync Now) oder über die API:
curl -X POST http://localhost:3000/api/v1/workspaces/{id}/sync \
-H "Authorization: Bearer {token}"
Konfliktauflösung
Konflikte treten auf, wenn dieselbe Datei sowohl im Web-Editor als auch über einen Git-Push zwischen Synchronisationsintervallen geändert wird.
Wie Konflikte erkannt werden
DocPlatform verfolgt Content-Hashes (SHA-256) für jede Seite. Beim Pullen von Remote-Änderungen wird der eingehende Hash mit dem lokalen Hash verglichen. Wenn beide vom gemeinsamen Vorfahren abweichen, wird ein Konflikt deklariert.
Was bei einem Konflikt passiert
- Die Speicher- oder Synchronisationsoperation gibt HTTP 409 Conflict zurück
- Beide Versionen (lokal und remote) werden aufbewahrt
- Die Web-Oberfläche zeigt ein Konflikt-Banner mit Optionen:
- Keep local — die Remote-Version verwerfen
- Keep remote — die lokale Version verwerfen
- Download both — beide Dateien für manuelles Zusammenführen herunterladen
- Ein Konflikt-Branch (
conflict/{page-slug}-{timestamp}) wird mit der lokalen Version erstellt
Konflikte vermeiden
- Verwenden Sie Webhooks statt Polling — schnellere Synchronisation bedeutet kleinere Konfliktfenster
- Weisen Sie Seitenverantwortung zu — ein Autor pro Seite reduziert das Kollisionsrisiko
- Nutzen Sie den Web-Editor für Inhalte, die IDE für Code — natürliche Trennung
- Kurze Synchronisationsintervalle —
sync_interval: 30in Umgebungen mit hoher Zusammenarbeit
Batch-Synchronisation
Wenn ein Remote-Push mehr als 20 geänderte Dateien enthält, wechselt DocPlatform in den Batch-Modus:
- Ruft alle geänderten Dateien in einem einzelnen Diff ab
- Erwirbt pfadspezifische Mutexe für alle betroffenen Pfade (sortiert zur Vermeidung von Deadlocks)
- Verarbeitet alle Dateien in einer einzelnen Datenbanktransaktion
- Invalidiert den Berechtigungs-Cache einmal (nicht pro Datei)
- Sendet eine einzelne
bulk-syncWebSocket-Nachricht mit der Gesamtanzahl der Änderungen
Dies verhindert Benachrichtigungsstürme und Datenbanküberlastung, wenn große Änderungen gepusht werden (z. B. initialer Repository-Import oder umfangreiche Umstrukturierung).
Konfliktspeicherung
Wenn ein Konflikt erkannt wird, werden beide Versionen auf der Festplatte gespeichert:
.docplatform/conflicts/
└── {page-id}/
└── 20250115T103045Z/
├── ours.md # Lokale Version (Web-Editor)
└── theirs.md # Remote-Version (Git-Push)
Konflikte bestehen, bis sie explizit über die Web-Oberfläche oder API aufgelöst werden. Der docplatform doctor-Befehl meldet ungelöste Konflikte.
Git-Engine-Details
DocPlatform verwendet eine hybride Git-Engine, die automatisch das beste Backend auswählt:
| Bedingung | Engine | Warum |
|---|---|---|
| Unter 5.000 Dateien | go-git (In-Process) | Schnell, keine externe Abhängigkeit, reines Go |
| Über 5.000 Dateien | Native Git-CLI (Subprozess) | Bessere Handhabung großer Repositories, Shallow Clones |
| go-git RSS > 512 MB | Native Git-CLI (Fallback) | Speichersicherheit — verhindert OOM bei großen Repositories |
Ein Worker-Pool von 4 gleichzeitigen Workern bearbeitet Git-Operationen über alle Workspaces hinweg. Jeder Workspace hat seinen eigenen Mutex — Operationen auf verschiedenen Workspaces laufen parallel, während Operationen auf demselben Workspace serialisiert werden.
Auto-Commit-Nachrichten verwenden dieses Format:
docs: update {page-title}
Edited via DocPlatform web editor
Author: [email protected]
Committer: DocPlatform <docplatform@local>
Arbeiten mit bestehenden Repositories
DocPlatform funktioniert mit bestehenden Dokumentations-Repositories. Wenn Sie ein Repository verbinden:
- Das Repository wird geklont (oder gepullt, wenn es bereits lokal existiert)
- Alle
.md-Dateien imdocs/-Verzeichnis werden indiziert - Frontmatter wird geparst und Seiten-Metadaten in SQLite gespeichert
- Der Suchindex wird inkrementell aufgebaut
Dateien außerhalb von docs/ werden nicht indiziert oder im Editor angezeigt, verbleiben aber unberührt im Git-Repository.
Import von anderen Plattformen
DocPlatform funktioniert mit jedem Markdown-Inhalt. So migrieren Sie von gängigen Plattformen:
| Quelle | Export-Methode | Hinweise |
|---|---|---|
| Docusaurus | Direkte Kopie | Bereits .md-basiert — kopieren Sie das docs/-Verzeichnis unverändert, fügen Sie bei Bedarf Frontmatter hinzu |
| GitBook | JSON-Export → konvertieren | Export über GitBook API, Konvertierung zu Markdown |
| Notion | Markdown-Export | Workspace als Markdown exportieren, in docs/-Hierarchie umstrukturieren |
| Confluence | HTML-Export → konvertieren | Bereiche als HTML exportieren, mit pandoc oder ähnlichem zu Markdown konvertieren |
| Wiki.js | Datenbank-Export | Seiten als Markdown aus dem Admin-Panel exportieren |
Allgemeine Migrationsschritte:
- Exportieren Sie Ihre Inhalte als Markdown-Dateien
- Platzieren Sie sie in einem Git-Repository unter
docs/ - Fügen Sie YAML-Frontmatter (mindestens
title) zu jeder Datei hinzu - Verbinden Sie das Repository mit DocPlatform
- Führen Sie
docplatform rebuildaus, um eine vollständige Reconciliation zu erzwingen
Der Reconciler von DocPlatform entdeckt automatisch alle .md-Dateien, parst deren Frontmatter, weist Seiten ohne id-Feld ULIDs zu und erstellt den Suchindex.