Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
Issue-Migration Gitea → GitLab (gitops#48)
migrate.py überführt Issues (offen und geschlossen, inkl. Kommentare)
eines Gitea-Repos in ein bestehendes GitLab-Projekt. Einmal-Werkzeug für den
#48-Cutover; hier versioniert wegen Reproduzierbarkeit.
Eigenschaften
- Dry-Run per Default,
--executeschreibt wirklich - Idempotent über Marker
<!-- gitea-migration: OWNER/REPO#N -->in der Ziel-Beschreibung — Wiederholungsläufe überspringen Migriertes - Zeitstempel bleiben erhalten (Admin-Token darf
created_atsetzen); Autorschaft läuft auf den Token-User, Original-Autor+Datum stehen im Migrations-Fußtext bzw. Kommentar-Präfix (bekannter, akzeptierter Verlust) - Labels namensgleich (Gruppen-Labels müssen vorher existieren — Stand
2026-08-01 sind die 9 Gitea-Labels + 5
host:*als Gruppe-13-Labels angelegt) - PRs werden ausgefiltert, geschlossene Issues nach Anlage geschlossen
Aufruf
python3 migrate.py sorb/<repo> <gitlab-projekt-id> # Dry-Run
python3 migrate.py sorb/<repo> <gitlab-projekt-id> --execute
Tokens: ~/.config/gitea-rohana/token (read:issue) und
~/.config/gitlab-lab/token (Admin) auf dem Mac.
Stand
| Repo | Ziel | Status |
|---|---|---|
| sorb/thread-net-git | Projekt 18 | ✅ migriert 2026-08-01 (Testlauf, 1 Issue, verifiziert) |
| sorb/threadnet-call | Projekt 19 | ausstehend |
| sorb/ThreadNet-Web | Projekt 16 | ausstehend |
| sorb/axion1337.chat-gitops | Projekt 20? | ausstehend — größter Brocken, zuletzt |
Cutover-Nachschritte (erst nach vollständiger Migration, siehe gitops#48): Gitea-Issues schließen/als migriert markieren, Doku-Verweise umbiegen (CLAUDE.md-Topologieregel!), TURN-Rotations-Hinweis, Bot-/Token-Workflows.