An Electron app to migrate your GitHub repositories to a Gitea instance.
Features
- Secure Authentication - Connect with GitHub and Gitea using personal access tokens
- Repository Listing - View all your GitHub repositories with search and filtering
- Bulk Selection - Select individual repos or all at once
- Mirror Migration - Full mirror clone including all branches, tags, and history
- Real-time Progress - Watch the migration progress in real-time
Getting Started
Prerequisites
Installation
# Install dependencies bun install # Start the app bun start
Creating Access Tokens
GitHub Personal Access Token
- Go to GitHub Settings > Developer Settings > Personal Access Tokens
- Select "Generate new token (classic)"
- Give it a descriptive name (e.g., "Gitea Migrator")
- Select the
reposcope (full control of private repositories) - Click Generate token
- Copy the token (starts with
ghp_)
Gitea Access Token
- Go to your Gitea instance
- Navigate to Settings → Applications → Access Tokens
- Enter a token name (e.g., "Gitea Migrator")
- Select the following scopes:
read:user- Required to verify connectionwrite:repository- Required to create repositories
- Click Generate Token
- Copy the token
Usage
- Connect GitHub - Enter your GitHub personal access token
- Connect Gitea - Enter your Gitea instance URL and access token
- Select Repositories - Browse and select the repos you want to migrate
- Migrate - Click "Migrate Selected" and watch the progress
How It Works
The migrator performs a full clone of each repository:
- Clones the repository from GitHub with
--mirrorflag (includes all branches and tags) - Creates a new repository on your Gitea instance with matching settings
- Pushes all branches (
--all) and tags (--tags) to Gitea - Cleans up temporary files
Note: Your GitHub repositories are NOT deleted or modified. This is a copy operation only. GitHub-specific pull request refs are excluded as Gitea doesn't support them.
Security
- Tokens are never stored persistently - they only exist in memory during the session
- All communication uses HTTPS
- Context isolation for security
Development
# Run in development mode
bun run devLicense
MIT License - feel free to use and modify as needed.
