docs(guides): add a migration guide for GitHub and GitLab #185
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-web!185
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "docs/migration-guide"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Nothing on the site told a visitor how to move an existing repository here, or what comes across
when they do. It is the first question anyone already settled on another host asks, and answering it
removes a real switching cost.
One guide covers both origins rather than two near-identical ones: the import path and most of the
content are shared, and a single page is the one a search lands on.
What the guide leads with
The choice that cannot be undone. A repository can be created as a mirror or as a one-off
import, and a repository that already exists here cannot be converted into a mirror afterwards. That
belongs at the top, not in a footnote, because it is the only decision in the whole process that a
reader cannot correct later.
The longer list is what does not come across. Workflows do not run unchanged —
runs-on: ubuntu-latesthas to becomeci— secrets never transfer, and branch protection, webhooks, starsand watchers are not part of an import. None of it is visible while the import runs; all of it is
visible afterwards. A migration guide that omits what is lost is worse than no guide, because the
loss is then discovered after the switch.
Existing guides are renumbered so this one sits second, after
getting-started, without anordertie.
Verified, not assumed — and where the line falls
The transfer claims were checked in two different ways, and the PR is explicit about which is which
rather than implying uniform confidence.
Confirmed by a real import —
sindresorhus/slashinto a scratch repository on the instance,since deleted:
Convert Windows backslash paths to slash pathsarrivedv3.0.0,v4.0.0,v5.0.0,v5.0.1,v5.1.0), 5 imported, blank titles preservedThat last finding is not in the issue and is now the guide's most practically useful paragraph:
GitHub allows roughly 60 unauthenticated API requests per hour, and an import that hits the limit
does not error — it slows to a crawl, which a reader would reasonably misread as a hung migration.
The guide therefore tells them to use a token when importing issue history, not only for private
repositories.
Sourced from the migration form at the pinned Forgejo version, not from an observed import: the
item list itself — issues, pull requests, labels, milestones, releases and wiki — read from
templates/repo/migrate/github.tmplatv16.0, plus the mirror behaviour and thecannot-convert-afterwards constraint from the repository mirror documentation.
Swedish terminology was taken from Forgejo's own
sv-SElocale as the style guide requires, notinvented: spegling, utgåvor, milstolpar, grenar, taggar.
pnpm lang-checkclean over 78 files,pnpm lintclean,pnpm check0 errors and 0 warnings,pnpm test296 passing,pnpm buildclean, and both new slugs present insitemap-0.xml.What is deliberately left open
The issue's definition of done asked for every claim to be checked against a real import. The
rate limit above stopped that: the scratch repository never began serving git data, so branches,
tags, history, issues, pull requests, labels, milestones and wiki are unconfirmed. Both attempts
were also interrupted by killing the client while the server-side task continued, so the 500 the
repository returned on
git ls-remoteis not presented as a Forgejo defect — it may be anartefact of that interruption.
Rather than overstate the guide's provenance, that gap is filed as gitborg/gitborg-web#184, which
records what is already confirmed, what is not, and that a GitHub token makes the remaining check a
minutes-long job.
A note on scope: LFS is offered as a migratable item by the API (
--include lfs) but does not appearas a checkbox in the GitHub migration form template. Since the guide's table describes the form, no
LFS row was added — an unverified row is exactly the kind of claim this guide exists to avoid.
Closes #182. Part of gitborg/gitborg-docs#28.