📦 Migration Guide

How to Migrate from GitHub to Gitea

💰 Save Free / $7-$21/user/month 🔓 Own your data 🖥️ Setup: Easy (~20 mins) 📅 October 08, 2026

Migrating from GitHub to Gitea is a pragmatic move for engineering teams seeking absolute control over their source code, lower hosting costs, and enhanced data privacy. While GitHub remains the industry giant with a massive ecosystem, its cloud-centric model, rising enterprise pricing tiers, and strict telemetry policies do not suit every organization. Gitea offers a compelling, lightweight open-source alternative written in Go that replicates core Git hosting workflows while running comfortably on modest self-hosted hardware like a Raspberry Pi or a private Kubernetes cluster.

Organizations typically make the switch when compliance mandates require on-premise data residency, or when they want to eliminate per-seat SaaS costs for large internal teams. Gitea provides a familiar user interface, built-in issue tracking, pull requests, and continuous integration capabilities that minimize the learning curve for developers coming straight from GitHub. However, executing a seamless migration requires careful planning around repository data, webhook redirection, and user identity mapping to ensure your engineering velocity does not drop during the transition.

$0
Gitea is free to self-host — vs Free / $7-$21/user for GitHub.
For a 50-person team that's a significant annual saving.

🗺️ Migration Steps

1
Audit and Export GitHub Repositories
Begin by listing all organization repositories, wikis, and gists you intend to move. You can use the GitHub CLI or API to bulk-export repository archives, ensuring you capture all branches, tags, and commit histories before initiating the transfer.
2
Provision and Configure Your Gitea Instance
Deploy Gitea on your target infrastructure using Docker, a binary release, or a Helm chart. Configure your database backend, set up SMTP for team invitations, and adjust the app.ini file to enable features like Git LFS and package registries that match your GitHub usage.
3
Migrate Repositories and History
Leverage Gitea's built-in migration tool, which connects directly to GitHub via a personal access token. This importer automatically transfers repositories, issues, pull requests, and releases while preserving author metadata and commit timelines.
4
Configure Authentication and User Accounts
Set up external authentication providers in Gitea, such as LDAP, OAuth2, or SAML, matching the identity providers you previously used with GitHub. Prompt team members to log in and link their accounts so that issue assignments and commit histories map correctly to their new profiles.
5
Update CI/CD Pipelines and Webhooks
Rewrite your GitHub Actions workflows to Gitea Actions runners or alternative CI systems like Drone or Jenkins. Recreate repository webhooks in Gitea pointing to your deployment servers, internal chat tools, and artifact registries to restore automated feedback loops.
6
Execute the Final Cutover
Announce a brief read-only freeze on GitHub, perform a final delta migration for any commits made during the transition, and update your local Git remotes. Instruct developers to run git remote set-url origin for all active local repositories to point to the new Gitea instance.

⚠️ Common Challenges & How to Avoid Them

GitHub Actions workflows are not natively compatible with Gitea's runner architecture.
You will need to reconfigure your workflow syntax to use act-runner, Gitea's compatible runner implementation, and adjust secrets and environment variables manually.
Issue numbers and pull request references might mismatch if automated migrations encounter API rate limits.
Use Gitea's administrative migration settings with a GitHub personal access token that has elevated scopes to prevent throttling, and verify critical pull request discussions post-import.
Team members accustomed to GitHub's extensive marketplace of third-party apps may find fewer integrations available out of the box in Gitea.
Audit your critical integrations beforehand and utilize Gitea's native webhooks and API endpoints to build custom integrations or connect to webhook relay services.

🔗 Get Started

❓ Frequently Asked Questions

Can I migrate GitHub Actions to Gitea Actions?
Yes, Gitea Actions is largely compatible with the GitHub Actions workflow syntax because it uses the same underlying runner engine called act. However, you will need to deploy Gitea Actions runners on your own infrastructure and update any custom marketplace action references that rely specifically on GitHub-hosted runners.
How does Gitea handle large file storage compared to GitHub?
Gitea includes native support for Git LFS (Large File Storage), allowing you to store heavy binary files efficiently. You can configure Gitea to store LFS objects on local disk storage or offload them to S3-compatible object storage just like you would on enterprise GitHub.
Is it possible to keep GitHub and Gitea synchronized during a gradual migration?
While you can set up repository mirroring from GitHub to Gitea for read-only sync, maintaining a two-way sync for active development is discouraged due to potential merge conflicts and diverging commit histories. It is best to schedule a clear cutover window for each repository or team.

Want a full feature and pricing comparison before you switch?

Read the Full GitHub vs Gitea Comparison →