Question about migrating GitHub issues to self‑hosted Forgejohttps://www.reddit.com/r/forgejo/comments/1rypgmg/question_about_migrating_github_issues_to/
3%
Migrate a remote git repository | Gitea Documentationhttps://docs.gitea.com/api/operations/repo-migrate/
Project import and export API | GitLab Docshttps://docs.gitlab.com/api/project_import_export/
1%
Migrate from GitHub | GitLab Docshttps://docs.gitlab.com/user/project/import/github/
1%
GitHub Backup Tool | Self-Hosted Repository Backup to Giteahttps://gitea-mirror.raylabs.io/
1%
Pull mirroring does not import pull requests (#349908) · Issue - GitLabhttps://gitlab.com/gitlab-org/gitlab/-/issues/349908
1%
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
If by “complete import/export mirroring” you mean code + Git history + issues + comments + pull/merge requests + reviews + labels/milestones + releases/assets, the field is narrower than it first appears.
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Question: Which repository hosting services provide complete import export mirroring and backup paths without losing issues reviews or release metadata?
Not literally lossless; some metadata and CI data are excluded
Gitea
✅
✅
✅ for supported migrations
✅
Excellent self-hosted mirror target
Cross-host PR migration can have fidelity limitations
Forgejo
✅
✅
✅/varies by source
✅
Good self-hosted archival option
Cross-platform migration coverage varies
GitHub
✅
Partial via migration/archive tooling
Partial
Partial
Good repository backup, weaker as a portable full-fidelity export
GitHub explicitly says migration archives don't contain all repository data and aren't restorable on GitHub
GitLab
GitLab is probably the closest match to a portable, metadata-rich project export. Its project export includes repositories, wikis, issues and comments, merge requests and comments/diffs, reviewers/approvers, labels, milestones, LFS objects, issue boards, and releases.
However, “complete” needs an asterisk. GitLab explicitly excludes things such as CI/CD job traces and artifacts, container/package registry contents, CI/CD variables, webhooks, encrypted tokens, and several other pieces of infrastructure metadata. It also warns that project export files should not be treated as backups.
Gitea has unusually good migration primitives for a self-hosted backup destination. Its migration API explicitly supports repositories, issues, labels, milestones, pull requests, releases, LFS, wiki, and continuous mirroring.
That makes Gitea particularly attractive as a second independent copy of repositories hosted elsewhere.
The important qualification is that “preserve PRs” isn't necessarily identical to “reconstruct every native review object exactly.” For example, external migrations can have limitations around creating native pull requests, so you should test the specific source → Gitea combination before treating it as a legally/audit-critical archive.
GitHub
GitHub is excellent as a primary repository host, but I wouldn't regard its native migration archive as a complete disaster-recovery format. GitHub itself says migration archives don't contain all repository data—including discussions, packages, and LFS objects—and there is no supported documented way to restore those archives back into GitHub.
A Git mirror therefore protects your Git history, but doesn't by itself preserve GitHub's entire collaboration database.
What I'd choose for a genuinely resilient setup
If your requirement is “I must be able to leave the provider without losing the project's history and collaboration record”, I'd use a layered architecture rather than trusting one provider's export:
For a self-hosted escape hatch, GitLab ↔ Gitea/Forgejo is a particularly interesting combination because both expose substantially more migration metadata than a bare git clone --mirror.
The key distinction is “mirror” vs. “backup.” A Git mirror is inherently excellent at preserving commits, branches, tags, and refs; issues, reviews, releases, attachments, CI artifacts, packages, permissions, and other application-level objects require a separate backup mechanism. No major hosted Git service currently gives you a universally lossless, provider-independent export of everything with the same semantics on another platform. GitLab's own documentation explicitly documents these limitations.
If you tell me your source host (GitHub/GitLab/Bitbucket/etc.) and desired backup destination (another SaaS, S3, Gitea, Forgejo, GitLab self-hosted, etc.), I can map out the least-lossy migration + automated backup architecture, including exactly which metadata needs separate API exports.
When looking for repository hosting services that preserve the entire ecosystem of a project—not just the Git history, but also issues, pull/merge requests, comments, labels, milestones, releases, and wikis—true continuous "live mirroring" for metadata is rare. Most platforms handle metadata preservation via migration/import-export rather than real-time bidirectional syncing, because standard Git wire protocols only understand commits, branches, and tags.
The landscape breaks down into platforms that excel at full metadata migration, file-based export/import, or active mirroring.
How it handles metadata: Both Gitea and its community-led fork Forgejo feature a built-in migrator that queries external provider APIs (GitHub, GitLab, Gitea, Bitbucket) during an initial import.
Preserved metadata: Issues, pull requests, external comments, labels, milestones, releases, wikis, and even Git LFS objects.
Mirroring vs. Migration Caveat: You can either do a one-time migration (which successfully pulls all metadata) OR set up a standard Git mirror (which keeps code, branches, and tags synchronized via Git, but does not dynamically sync new issues or PR metadata in real time). To keep a live secondary backup with issues, many teams run a scheduled script using the Gitea API to re-sync or migrate updates.
2. GitLab (Best for Native Project Export/Import & Direct Transfer)
How it handles metadata: GitLab supports a comprehensive Project Import/Export mechanism (via UI bundle downloads or direct server-to-server transfer).
Mirroring Caveat: GitLab’s repository pushing/pulling mirroring features sync Git references only. If you want a mirror that captures issues and merge requests, you must rely on migrating between GitLab instances via Direct Transfer rather than a continuous passive git mirror. Certain constraints apply regarding diff histories or user mapping depending on the specific GitLab version.
3. GitHub (Best for Proprietary Import/Export Support)
How it handles metadata: GitHub has an importer tool designed to ingest repositories from SVN, Mercurial, Bitbucket, and GitLab.
Preserved metadata: Git history, issues, and pull requests can be mapped if migrating via specialized scripts or supported platform transitions, but GitHub's native inbound mirroring does not sync third-party issue trackers.
Backup limitation: GitHub does not provide a native inbound/outbound mirror for issues and PR metadata to another distinct non-GitHub platform; native mirrors are strictly Git-based. Third-party backup utilities (like github-backup ) have to scrape the GraphQL/REST APIs to pull down JSON representations of issues and comments.
Summary Comparison Table
Hosting Service
Git History & Tags
Issues & Comments
Pull / Merge Requests
Releases & Milestones
Wikis
Live Continuous Mirroring of Metadata?
Forgejo / Gitea
Yes
Yes
Yes
Yes
Are you looking to set up an automated disaster-recovery backup of a GitHub/GitLab organization, or are you trying to execute a permanent migration to a self-hosted platform like Forgejo? Knowing this will help determine if you need API backup scripts or a one-time migration tool.
If by “complete import/export mirroring and backup” you mean Git history plus issues, comments/reviews, pull/merge requests, releases, attachments, and other project metadata can be moved to another instance without flattening everything into plain Git, the choices are narrower than ordinary Git mirrors.
Practical comparison
Service/platform
Full project migration
Issues + comments
PR/MR reviews
Releases
Good independent backup path
GitLab
Yes
Yes
Yes, with caveats
Yes
Yes, but use instance backups/API rather than project export alone
Forgejo
Yes, especially self-hosted → self-hosted
Yes
Yes
Yes
Yes — database + repositories + attachments
Gitea
Yes, especially self-hosted → self-hosted
Yes
Yes
Yes
Yes — full-instance backups
GitHub
Partial/limited as a portable archival format
Yes within GitHub
Yes within GitHub
Yes
Possible, but not a single complete portable project archive
GitLab
GitLab is probably the clearest documented option if portable project export/import is the primary requirement.
Its project export contains repositories and wikis, issues and comments, merge requests and comments, labels, milestones, releases, LFS objects, protected branches/tags, reactions, uploads, etc.
However, “complete” needs an asterisk. GitLab explicitly says project exports aren't suitable as the sole backup mechanism. Some things aren't exported, including CI artifacts/job traces, registry images, variables, webhooks, encrypted tokens, and some relationship/activity data.
There are also migration losses: for example, only the latest merge-request diff version is preserved by project import/export.
So a robust GitLab backup strategy is:
GitLab instance backup + project export/API + Git repository mirror + object/registry backups, rather than relying on the project .tar.gz alone.
Forgejo / Gitea
For maximum control, self-hosted Forgejo or Gitea is worth considering.
The important distinction is that their strongest backup path isn't merely a “repository export.” You control the entire application state: Git repositories, database, attachments, configuration, and other instance data. That gives you a substantially better disaster-recovery story than a bare git clone --mirror.
Forgejo is actively maintained; its current release series is 16.x as of September 2026, with 15.x designated LTS.
This model is particularly attractive if your requirement is:
“I want to be able to restore the whole forge somewhere else, not merely recreate repositories and manually reconstruct issues.”
GitHub
GitHub is excellent as a hosting platform, but I wouldn't treat ordinary GitHub repository mirroring as a complete archival format. A Git mirror preserves Git objects, branches and tags; it does not inherently contain GitHub Issues, PR review conversations, releases, discussions, etc.
Those need separate API/data-export mechanisms. Consequently, a second GitHub/Git-compatible repository isn't by itself a complete GitHub backup.
The important distinction
There are really three levels of mirroring:
Git mirror
git clone --mirror
Preserves commits, branches, tags, refs.
Does not preserve issues/reviews/releases as Git objects.
Best option for genuine disaster recovery and later restoration.
Particularly powerful with self-hosted Forgejo/Gitea/GitLab.
If your requirement is specifically “no loss of issues, review discussions, and release metadata while maintaining an independently restorable copy,” I'd architect around #3, with #1 as an additional immutable/off-site Git backup. GitLab, Forgejo, and Gitea can all fit that model; GitHub requires more separate backup plumbing.
If you tell me whether you're looking for SaaS-to-SaaS migration, self-hosted backup, or an air-gapped archival copy, I can narrow this down to the concrete services/tools that preserve the most metadata.
Its project export contains repositories and wikis, issues and comments, merge requests and comments, labels, milestones, releases, LFS objects, protected branches/tags, reactions, uploads, etc.
However, “complete” needs an asterisk. GitLab explicitly says project exports aren't suitable as the sole backup mechanism. Some things aren't exported, including CI artifacts/job traces, registry images, variables, webhooks, encrypted tokens, and some relationship/activity data.
There are also migration losses: for example, only the latest merge-request diff version is preserved by project import/export.
So a robust GitLab backup strategy is:
GitLab instance backup + project export/API + Git repository mirror + object/registry backups, rather than relying on the project .tar.gz alone.
Forgejo / Gitea
For maximum control, self-hosted Forgejo or Gitea is worth considering.
The important distinction is that their strongest backup path isn't merely a “repository export.” You control the entire application state: Git repositories, database, attachments, configuration, and other instance data. That gives you a substantially better disaster-recovery story than a bare git clone --mirror.
Forgejo is actively maintained; its current release series is 16.x as of September 2026, with 15.x designated LTS.
This model is particularly attractive if your requirement is:
“I want to be able to restore the whole forge somewhere else, not merely recreate repositories and manually reconstruct issues.”
GitHub
GitHub is excellent as a hosting platform, but I wouldn't treat ordinary GitHub repository mirroring as a complete archival format. A Git mirror preserves Git objects, branches and tags; it does not inherently contain GitHub Issues, PR review conversations, releases, discussions, etc.
Those need separate API/data-export mechanisms. Consequently, a second GitHub/Git-compatible repository isn't by itself a complete GitHub backup.
The short answer is no single Git repository hosting service provides a native, ongoing, automated two-way mirror for non-code metadata like issues, pull requests, reviews, and release notes out-of-the-box.
Standard Git-level mirroring (via git push --mirror or built-in pull/push mirrors on GitHub, GitLab, and Gitea) only synchronizes Git references —meaning commits, branches, and tags. Issues, comments, pull request states, and project boards live in the host’s proprietary application database, not inside the Git object database itself.
However, platforms handle one-off migrations/imports and backup/restore paths with varying degrees of completeness.
One-Time Migration vs. Continuous Mirroring
One-Time Imports (High Fidelity): Platforms like GitLab, Gitea , and Forgejo feature comprehensive migration importers. When migrating from GitHub or GitLab to another instance, they can successfully pull issues, PRs/merge requests, milestones, labels, and releases once during setup using an API access token.
Continuous Mirroring (Code Only): If you configure a continuous pull/push mirror between two hosts, it will keep your branches and tags in sync, but subsequent issues or comments created on one platform will not propagate to the other.
How Platforms Handle Import/Export & Backups
GitLab (Self-Hosted / Enterprise):
Import/Export: Offers comprehensive project export/import tools that bundle project data, repo contents, issues, merge requests, labels, and milestones into a single archive file.
Backup path: Comprehensive Rake tasks (gitlab:backup:restore ) snapshot the entire PostgreSQL database alongside the Git repositories, preserving all metadata if restoring to an identical GitLab version.
Gitea / Forgejo:
Import/Export: Feature a robust "New Migration" web UI that targets GitHub, GitLab, Gitea, and Forgejo, pulling issues, PRs, and releases during the initial handshake.
Backup path: Built-in gitea dump (or forgejo dump ) packages the database, attachments, and repositories into a zip file, though restoring requires spinning up an instance of the same software version.
Solutions for Complete Metadata Backup and Sync
To truly mirror or back up a repository including its non-code metadata without data loss, you have to rely on specialized third-party tooling or a hard-migration workflow:
BackHub: (Often used for GitHub) Automatically backs up repositories including issues, pull requests, wiki data, and metadata into a structured format or a separate storage bucket.
Scripted/API Sync via CI Actions: Some teams run scheduled cron jobs or GitHub Actions/GitLab CI pipelines utilizing open-source migration scripts (such as github-issues-import or custom scripts interacting with GraphQL APIs) to replicate new issues and comment threads to a secondary host.
Are you looking to set up a cold disaster-recovery backup of your metadata, or do you need a hot active-active failover mirror between two different hosting platforms? Let me know and I can detail the precise backup or migration script pattern for your stack.
If by “complete” you mean a second hosting instance can be rebuilt with the Git history plus issues, comments/reviews, pull/merge requests, releases, labels, milestones, etc., the field is narrower than it first appears.
Service
Git mirror
Issues/comments
PR/MR + review data
Releases
Portable import/export
Backup/restore confidence
GitLab
✅
✅
✅, but some limitations
✅
✅
Strongest overall, but project exports are explicitly not complete backups
Gitea
✅
✅
✅ migration support
✅
⚠️ More migration/API-oriented than a universal archive
Strong if self-hosted, especially with database + repository backups
Forgejo
✅
✅
✅
✅
⚠️ Similar caveat: backup is primarily instance-level
Strong for self-hosting
GitHub
✅ Git mirror
⚠️
⚠️
⚠️
⚠️ Migration archives are incomplete
Good Git backup, poor “restore everything” story
The important distinction
Git mirroring alone is not a backup of a repository hosting service. A git clone --mirror preserves branches, tags, commits and other Git refs, but it does not inherently preserve issues, comments, reviews, release records, permissions, CI configuration, etc. GitHub's own documentation makes this distinction and says its migration archives don't contain all repository data and aren't supported for restoration.
Best options
1. GitLab — best documented migration/export capability
GitLab's project export contains a surprisingly broad set of objects: repositories and wiki, issues and comments, merge requests and comments/reviewers, labels, milestones, releases, LFS objects, protected branches/tags, and more.
However, it is not lossless. GitLab explicitly says project exports shouldn't be used as backups, and some things aren't exported—including CI artifacts/job traces, registries, webhooks, encrypted tokens, some relationships, and other instance configuration. Also, merge-request export preserves only the latest diff version.
For an actual disaster-recovery strategy, GitLab's instance-level backup/restore plus independent Git/object-storage backups is preferable to relying on project exports.
2. Gitea — excellent if you want an independent, self-hosted mirror
Gitea's migration API explicitly supports migrating issues, labels, milestones, LFS, pull requests, releases, wiki and Git mirrors. Gitea Documentation This makes it particularly interesting as a second, independently operated forge.
The catch is that its migration mechanism isn't equivalent to a universal archival format. For serious disaster recovery, you'd back up the Gitea repositories and its database/storage, rather than assuming a migration operation is a perfect round-trip.
3. Forgejo — compelling self-hosted alternative
Forgejo is in the same general family as Gitea and is attractive if the goal is avoiding dependence on one commercial forge. It is self-hostable and actively maintained; its current v16 line was released in July 2026, with an LTS release also available.
What I would use for “no single provider can destroy my project”
I'd use two layers rather than looking for one magical export format:
Bare Git mirrorgit clone --mirror + git lfs fetch --all where applicable.
Forge metadata backup
API/database-level backup of issues, comments, PRs/MRs, reviews, releases, labels, milestones, etc.
Second independent forge
GitLab ↔ Gitea/Forgejo, preferably with automated synchronization.
Immutable/offline storage
Periodic encrypted snapshots outside both hosting providers.
Regular restore tests
A backup isn't really a backup until you've demonstrated that it can reconstruct a working project.
So, if your requirement is “I can lose GitHub/GitLab tomorrow and recreate the project with essentially all collaboration history”, I'd rank the approaches:
The key is that none of the mainstream hosted services gives you a truly universal, lossless, provider-independent export of every piece of metadata. GitLab comes closest on documented project-level export, while self-hosted Gitea/Forgejo give you the strongest control over the underlying data.
GitLab's project export contains a surprisingly broad set of objects: repositories and wiki, issues and comments, merge requests and comments/reviewers, labels, milestones, releases, LFS objects, protected branches/tags, and more.
However, it is not lossless. GitLab explicitly says project exports shouldn't be used as backups, and some things aren't exported—including CI artifacts/job traces, registries, webhooks, encrypted tokens, some relationships, and other instance configuration. Also, merge-request export preserves only the latest diff version.
For an actual disaster-recovery strategy, GitLab's instance-level backup/restore plus independent Git/object-storage backups is preferable to relying on project exports.
2. Gitea — excellent if you want an independent, self-hosted mirror
Gitea's migration API explicitly supports migrating issues, labels, milestones, LFS, pull requests, releases, wiki and Git mirrors. docs.gitea.com This makes it particularly interesting as a second, independently operated forge.
The catch is that its migration mechanism isn't equivalent to a universal archival format. For serious disaster recovery, you'd back up the Gitea repositories and its database/storage, rather than assuming a migration operation is a perfect round-trip.
3. Forgejo — compelling self-hosted alternative
Forgejo is in the same general family as Gitea and is attractive if the goal is avoiding dependence on one commercial forge. It is self-hostable and actively maintained; its current v16 line was released in July 2026, with an LTS release also available.
If by “complete import/export mirroring” you mean the Git repository plus issues, comments/reviews, pull/merge requests, releases, attachments, and associated metadata, with a practical path to restore it elsewhere, the field is narrower than it first appears.
Best options
Service
Git mirror
Issues/comments
PR/MR + reviews
Releases
Full backup/restore
Portability
GitLab
✅
✅
✅
✅
⚠️ Partial project export; full instance backup is stronger
Excellent
Gitea
✅
✅
✅
✅
✅ Full-instance dump
Excellent
Forgejo
✅
✅
✅
✅
✅ Full-instance dump
Excellent
GitHub
✅
⚠️ Metadata backup available
⚠️ Not a complete portable mirror
⚠️
⚠️
Good for Git, weaker for full-fidelity migration
Bitbucket
✅
⚠️
⚠️
⚠️
⚠️
Moderate
1. GitLab — best managed-platform choice
GitLab has unusually good migration tooling. Its project export can preserve repositories, issues, merge requests, comments, labels, milestones, releases, LFS objects, protected branches/tags, reactions, and other project data.
It also supports repository push/pull mirroring, including branches, tags, and commits.
But there's an important caveat: GitLab explicitly says project exports should not be treated as backups, because some data isn't exported. Missing items include things such as CI artifacts/traces, variables, webhooks, encrypted tokens, some relationships, and security policies.
If you are migrating between GitLab instances, GitLab's direct-transfer mechanism is preferable to a generic Git URL import because a Git URL import doesn't bring issues or merge requests.
2. Gitea — excellent for true disaster recovery
Gitea is particularly attractive if you want control over the backup itself.
Its gitea dump contains:
the complete repository directories
database dump
attachments
avatars
LFS data
configuration/customization data
and can be restored as an instance.
That makes it substantially different from merely doing git clone --mirror: the latter protects Git objects, but not the forge's database containing issues, comments, reviews, users, etc.
The downside is that this is primarily a self-hosted recovery model, rather than a universal hosted-service interchange format.
3. Forgejo — arguably the strongest portability-oriented architecture
Forgejo has Git repository mirroring for branches, tags and commits, including push and pull mirrors.
More importantly for your requirement, Forgejo has a server-level dump facility that packages its files and database into a restorable archive.
That gives you both an operational mirror and a disaster-recovery copy.
What about GitHub?
GitHub is excellent for Git-level redundancy. GitHub itself documents git clone --mirror as a way to preserve the repository and its revision history, and LFS objects can be fetched separately.
But a Git mirror is not a complete GitHub backup. Issues, pull-request discussions/reviews, releases, Actions data, permissions, etc. live outside the Git object database.
GitHub does provide migration archives/API-based approaches for selected metadata, but I would not treat GitHub as the best choice if your hard requirement is:
“I must be able to reconstruct the entire forge elsewhere without losing historical collaboration metadata.”
My ranking for your requirement
Forgejo — best if self-hosting and maximum control/restore capability matter.
Gitea — similarly strong, with mature full-instance dump/restore.
GitLab — best choice if you want a polished hosted or self-managed enterprise platform; very strong migration facilities, but its project export is explicitly not a complete backup.
GitHub — excellent primary host and Git mirror source, but requires additional tooling for genuinely comprehensive metadata backup.
Bitbucket — workable, but I wouldn't choose it specifically for long-term, full-fidelity forge portability.
The architecture I'd recommend
If “never lose anything” is the actual requirement, don't rely on the hosting provider's built-in mirror alone. Use three layers:
Git mirroring protects Git. Full forge dumps protect the collaboration system around Git.
For GitLab, for example, repository mirroring only synchronizes branches/tags/commits, whereas project export contains issues, merge requests, comments, releases, etc.—and even that export isn't a complete backup.
If you tell me whether you're choosing a hosted service, self-hosting, or planning a GitHub/GitLab migration, I can give you a concrete “zero-loss” backup/mirroring design and identify exactly which metadata each option can and cannot preserve.
GitHub is excellent for Git-level redundancy. GitHub itself documents git clone --mirror as a way to preserve the repository and its revision history, and LFS objects can be fetched separately.
But a Git mirror is not a complete GitHub backup. Issues, pull-request discussions/reviews, releases, Actions data, permissions, etc. live outside the Git object database.
GitHub does provide migration archives/API-based approaches for selected metadata, but I would not treat GitHub as the best choice if your hard requirement is:
“I must be able to reconstruct the entire forge elsewhere without losing historical collaboration metadata.”
The short answer is no standard native Git hosting service provides a continuous, real-time mirror that automatically keeps metadata like issues, pull/merge requests, and release comments dynamically synced bi-directionally or unidirectionally out of the box.
Git-based mirrors (like standard push/pull mirrors in GitHub, GitLab, Gitea, or Forgejo) operate strictly at the Git object level—synchronizing commits, branches, and tags. Platform-specific metadata (issues, PR reviews, comments, and release binaries) live in the host's proprietary relational database layer, not inside the Git history itself.
However, you can achieve complete import/export migration and true metadata-inclusive backup/mirror paths by combining one-time/periodic migration tools or dedicated third-party compliance backup platforms.
Platforms like Gitea, Forgejo , and GitLab have robust importers that capture issues, pull requests, milestones, labels, wikis, and releases upon initial import:
Forgejo / Gitea: Offer a comprehensive Forgejo Migration Tool that imports code along with issues, PRs, and releases, though turning it into a live mirror drops the non-code metadata stream after setup.
GitLab: Provides extensive project import/export features and project migration paths from GitHub or other instances, capturing extensive metadata during the transition.
2. Continuous Full-Fidelity Backup & Recovery (The Real Alternative)
If your goal is disaster recovery, compliance, or maintaining an active secondary hot-spare of all metadata (not a live-editable development mirror), specialized automated backup and restore services solve this completely:
Cloudback for GitHub: Backs up full Git history, Git LFS, wikis, releases with binary assets, issues, pull requests with inline review comments, labels, milestones, and Projects V2 into storage you own (AWS S3, Azure, Google Cloud) with full-fidelity restore.
If by “complete import/export mirroring” you mean a repository can be moved to another instance while retaining the Git history plus issues, comments/reviews, labels, milestones, releases, wiki, etc., the field is narrower than it first appears.
Best options
Service
Issues
PR/MR reviews/comments
Releases
Wiki/LFS
True portable export
Backup/mirror suitability
GitLab
✅
✅
✅
✅
Strong
Best overall
Gitea
✅
✅
✅
✅
Good
Very good
Forgejo
✅
✅
✅
✅
Good
Very good
GitHub
✅
⚠️
✅
✅
Limited
Good with migration tooling
Bitbucket
✅
⚠️
✅
✅
Limited
Weaker for full-fidelity portability
1. GitLab — probably the strongest choice
GitLab's project export/import is unusually comprehensive. Current documentation says project exports can include repositories, issues and comments, merge requests and comments/diffs, reviewers/approvers, labels, milestones, releases, wiki, LFS objects, issue boards, protected branches/tags, and more.
That makes a GitLab.com → GitLab Self-Managed → GitLab.com or GitLab instance A → instance B strategy quite practical.
There are important caveats, though:
Not everything is exported—CI artifacts/traces, registry images, CI variables, webhooks, encrypted tokens, some approval settings, etc. are excluded.
MR history isn't perfectly lossless: only the latest diff version is preserved.
GitLab explicitly says not to treat project exports as your backup mechanism, because not all data is exported.
rather than assuming the project export alone is a complete disaster-recovery backup.
2. Gitea / Forgejo — excellent for an independent, self-hosted backup forge
Gitea has a migration API that explicitly supports migrating issues, labels, milestones, pull requests, releases, wiki and LFS, in addition to the Git repository.
This makes a setup such as:
GitHub/GitLab → Gitea/Forgejo → second Gitea/Forgejo
quite attractive if your priority is not being locked into one commercial provider.
There are also tools specifically designed to mirror repositories and the forge-level objects. For example, the Gitea Mirror project documents synchronization of Git data plus issues, pull requests, labels, milestones, releases, wiki and LFS objects.
For an organization wanting an inexpensive independent warm standby, I'd seriously consider Forgejo/Gitea.
3. GitHub — excellent primary host, less ideal as your archival format
GitHub has sophisticated migration tooling, particularly GitHub Enterprise Importer, but I wouldn't describe GitHub as offering a universally lossless, provider-independent export format.
GitHub itself documents migration warnings involving things such as pull-request review threads and repository metadata, meaning a successful migration doesn't necessarily mean every piece of metadata survived identically.
GitHub export → guaranteed complete clone of the GitHub project
What I would choose
If data portability is a first-class requirement, my ranking would be:
GitLab — best combination of mature migration facilities and breadth of project metadata.
Forgejo/Gitea — best independent/self-hosted disaster-recovery target.
GitHub — excellent service, but don't make its native export your only backup.
Bitbucket — workable, but I wouldn't select it specifically for maximum portability.
The key distinction is Git mirroring vs. forge mirroring. A git clone --mirror preserves branches, tags and Git objects, but doesn't preserve issues, PRs/MRs, reviews, releases, labels, wiki metadata, etc. A genuinely resilient architecture therefore needs both.
That gives you two different recovery mechanisms: a live alternative forge and an offline/object-storage archive.
If your requirement is specifically “I want to be able to leave GitHub/GitLab/etc. tomorrow and recreate the repository elsewhere with essentially all issues, PR reviews, releases, comments and history intact,” I can also make a feature-by-feature matrix of GitHub, GitLab, Gitea, Forgejo, Bitbucket, Azure DevOps and SourceHut, including exactly what survives migration and what doesn't.
For an organization wanting an inexpensive independent warm standby, I'd seriously consider Forgejo/Gitea.
3. GitHub — excellent primary host, less ideal as your archival format
GitHub has sophisticated migration tooling, particularly GitHub Enterprise Importer, but I wouldn't describe GitHub as offering a universally lossless, provider-independent export format.
GitHub itself documents migration warnings involving things such as pull-request review threads and repository metadata, meaning a successful migration doesn't necessarily mean every piece of metadata survived identically.
Gitea and GitLab are the primary repository hosting and self-hosted platforms that provide complete import, export, and migration paths capable of preserving issues, pull requests/reviews, labels, milestones, and release metadata without relying on third-party SaaS wrappers.
Standard Git hosting (like plain cgit or basic bare git setups) only mirrors the version-control history (commits, branches, and tags). Capturing auxiliary project metadata requires platform-aware migration tools that interact deeply with application APIs.
Full round-trip re-import of closed/merged state with original author mapping requires specialized tooling or enterprise utility.
Bitbucket
Limited native format import/export
Basic issues and source trees
Pull request and comment migration between non-Bitbucket hosts is restricted.
How Gitea and GitLab Achieve Complete Mirroring
Gitea Migration Engine: Gitea features a built-in migration system supporting direct server-to-server or API token imports from GitHub, GitLab, and Bitbucket. It pulls and maps issues, pull requests, comments, milestones, and labels directly into its database structure.
GitLab Project Export: GitLab generates a compressed archive containing project configuration, issues, merge requests, user annotations, and wiki pages. This allows complete backup and restoration across instances running compatible versions.
Dedicated Backup Services: For immutable, automated multi-platform compliance outside of native features, third-party backup layers like GitProtect.io or specialize in metadata snapshots for , , and .
If you have a specific source and target platform in mind (such as GitHub to self-hosted Gitea or GitLab to GitLab ), let me know so I can provide the exact configuration parameters or CLI commands needed.
The short answer is none of the standard platform-to-platform native continuous mirror features (such as GitHub-to-GitLab, GitHub-to-Gitea/Forgejo, or GitLab-to-GitHub) handle continuous synchronization of issues, pull requests, releases, and project metadata.
Native git-hosting "mirrors" universally operate at the Git object level—synchronizing commits, branches, and tags. Issues, comments, pull/merge requests, and release metadata are handled via one-time platform APIs during an initial migration/import , but subsequent updates do not flow automatically through a standard mirror.
To achieve a true continuous backup or mirror path that includes non-code metadata, you have to separate Git code mirroring from metadata synchronization tools.
One-way/One-time limits: Tools like Gitea, Forgejo, and SourceCraft allow you to import issues and pull requests once during a migration, but checking "this repository will be a mirror" greys out or disables the metadata import options for ongoing syncs.
Best Workarounds & Architectures for Complete Metadata Backups
If your goal is disaster recovery or maintaining a warm standby that includes issues, PRs, and releases, use these specialized approaches instead of native repository mirrors:
Scheduled API-Based Migration Scripts (The Industrial Approach)
How it works: Instead of a native mirror button, you run a scheduled cron job (e.g., daily or hourly) using dedicated backup utilities that call both platform APIs to pull/recreate or update issues, labels, milestones, and releases.
Tools to use: Dedicated backup tools like github-backup or custom scripts leveraging the GitHub REST API and GitLab REST API to dump issues/PRs into JSON/SQLite archives, or re-migrate them to a cold-storage instance.
Gitea/Forgejo with Automated Re-migration Workflows
How it works: Because Gitea and Forgejo have robust migration APIs supporting issues and PRs, some self-hosters write automation scripts that delete and re-create a mirrored staging repo via the migration endpoint on a regular cadence.
Trade-off: It works for full state recovery, but creates heavy log noise and churns internal database IDs on the target instance.
If you want to set up an automated backup pipeline, let me know:
Which source platform you are using (GitHub, GitLab, Bitbucket, etc.)
Where you want the backup destination to live (self-hosted Gitea, local storage, another cloud host)
I can recommend a specific scripting approach or tool to capture your issues and metadata safely.
No (Direct transfer/export captures it; mirrors are Git-only)
GitHub
Yes
Yes (Via API/Migration)
Yes (Via API/Migration)
Yes
Yes
No (Git-only for mirroring)
GitHub:
Import/Export: Provides repository migration APIs and enterprise utilities, but continuous syncing of issues back and forth to an external secondary hot-standby is unsupported natively.
BackupLABS
GitHub
GitLab
Bitbucket
Platform-Native Export Bundles (Cold Backups)
How it works: Both GitHub and GitLab allow you to generate full exports (including issues and wiki data via Settings/Exports). GitLab offers comprehensive project JSON exports/imports that preserve a vast amount of internal metadata.
Trade-off: This is an archive/backup path rather than a "live mirror." It requires manual or scripted triggering via API.
Follow how AI answers questions like this in Source Code Hosting Platforms.