Go-based tool for migrating GitLab repositories, users, groups, issues and related data to Gitea instances.
More-or-less a port of gitlab-to-gitea from python to Go because fixing python appears to be a thing I just can't get my mind around, but rewriting it? I'm actually OK at that.
Also includes:
cmd/forkfix
, for fixing fork relationships between migrated repositories by manipulating the gitea sql databasecmd/unmigrate
to delete everything from a gitea instance except for the admin userscmd/mirror
to set up a mirror from github to giteacmd/orgfix
to establish an organization's repositories as the "parent fork" by manipulating the gitea sql databasecmd/namefix
to discover repositories that have identical initial commit hashes but different namescmd/johnconnor
which is a super-dangerous script for eliminating spam accounts from gitlab instances.
- Migrates users, groups, and their relationships from GitLab to Gitea
- Transfers repositories with labels, milestones, issues, and comments
- Preserves user relationships (collaborators) and SSH keys
- Supports resumable migrations through state tracking
- Handles username normalization and entity mapping between platforms
- Modular package structure instead of monolithic script
- Configuration via environment variables rather than hardcoded values
- Added utility tools (
forkfix
,unmigrate
,johnconnor
,mirror
,orgfix
,namefix
) - Database connectivity for commit action imports
- Improved error handling with recovery mechanisms
- Separation of API client code from migration logic
- Ensure Go 1.24+ is installed
- Clone the repository:
git clone https://github.com/go-i2p/gitlab-to-gitea.git cd gitlab-to-gitea
- Install dependencies:
go mod download
- Build the executable:
go build -o gitlab-to-gitea ./cmd/migrate/
- Copy the example environment file:
cp _env.example .env
- Edit
.env
with your GitLab and Gitea details:GITLAB_URL=https://your-gitlab-instance.com GITLAB_TOKEN=your-gitlab-token GITEA_URL=https://your-gitea-instance.com GITEA_TOKEN=your-gitea-token
Execute the migration tool after configuration:
./gitlab-to-gitea
The tool will:
- Connect to both GitLab and Gitea instances
- Migrate users and groups first
- Migrate projects with all associated data
- Track progress in
migration_state.json
(resumable if interrupted)
- github.com/xanzy/go-gitlab: GitLab API client
- github.com/joho/godotenv: Environment variable handling
- github.com/go-sql-driver/mysql: Optional database connectivity for action import
- github.com/mattn/go-sqlite3: forkfix sqlite handling
For commit action import to Gitea's activity timeline:
- Configure database details in
.env
- Generate a commit log file
- Use the database import functionality in the
gitea
package
MIT License