gitlab-to-gitea

module
v0.0.0-...-f62322a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2025 License: MIT

README

gitlab-to-gitea

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 database
  • cmd/unmigrate to delete everything from a gitea instance except for the admin users
  • cmd/mirror to set up a mirror from github to gitea
  • cmd/orgfix to establish an organization's repositories as the "parent fork" by manipulating the gitea sql database
  • cmd/namefix to discover repositories that have identical initial commit hashes but different names
  • cmd/johnconnor which is a super-dangerous script for eliminating spam accounts from gitlab instances.

Core Functionality

  • 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

Go Implementation Improvements

  • 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

Installation

  1. Ensure Go 1.24+ is installed
  2. Clone the repository:
    git clone https://github.com/go-i2p/gitlab-to-gitea.git
    cd gitlab-to-gitea
    
  3. Install dependencies:
    go mod download
    
  4. Build the executable:
    go build -o gitlab-to-gitea ./cmd/migrate/
    

Configuration

  1. Copy the example environment file:
    cp _env.example .env
    
  2. 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
    

Usage

Execute the migration tool after configuration:

./gitlab-to-gitea

The tool will:

  1. Connect to both GitLab and Gitea instances
  2. Migrate users and groups first
  3. Migrate projects with all associated data
  4. Track progress in migration_state.json (resumable if interrupted)

Key Dependencies

  • 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

Optional Features

For commit action import to Gitea's activity timeline:

  1. Configure database details in .env
  2. Generate a commit log file
  3. Use the database import functionality in the gitea package

License

MIT License

Directories

Path Synopsis
cmd
forkfix command
johnconner command
migrate command
Package main provides the entry point for the GitLab to Gitea migration tool
Package main provides the entry point for the GitLab to Gitea migration tool
mirror command
orgfix command
unmigrate command
Package config handles application configuration through environment variables
Package config handles application configuration through environment variables
Package gitea provides functionality for working with Gitea actions
Package gitea provides functionality for working with Gitea actions
Package gitlab provides a client for interacting with the GitLab API
Package gitlab provides a client for interacting with the GitLab API
Package migration handles the migration of data from GitLab to Gitea
Package migration handles the migration of data from GitLab to Gitea
Package utils provides utility functions used throughout the application
Package utils provides utility functions used throughout the application

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL