# How to Migrate from GitLab Duo to GitHub Copilot

Learn how to migrate from gitlab duo to github copilot by transferring repository histories, converting CI/CD pipeline files, and setting up editor extensions. This guide details the steps required to transition developer environments, configure workspace-level custom instructions, and establish shared collaboration workspaces.

Source: https://fast.io/resources/how-to-migrate-from-gitlab-duo-to-github-copilot/
Last reviewed: 2026-08-20

## How to Migrate from GitLab Duo to GitHub Copilot

Migrating an engineering team from GitLab Duo to GitHub Copilot is not as simple as swapping IDE extensions. While code suggestion engines look identical in the editor, they rely on entirely different enterprise permissions, repository metadata structures, and pipeline security contexts. A naive migration that ignores these differences leaves developers with broken contexts, disconnected CI/CD feedback loops, and unauthorized repository access.

Transitioning from GitLab Duo to GitHub Copilot represents a significant change in how developers interact with generative AI. GitLab Duo uses a variety of underlying models, including Anthropic Claude and custom models developed by GitLab, to provide context-aware suggestions. In contrast, GitHub Copilot leverages OpenAI's GPT models and custom reasoning architectures. This structural difference affects the latency, style, and scope of code completions. Additionally, GitLab Duo's suggestions are heavily influenced by GitLab's web interface, issue boards, and merge requests. Copilot focuses deeply on editor-level state, pulling context from open tabs, adjacent files, and imports. This difference makes workspace context coordination critical.

Before initiating the migration, teams must conduct a thorough audit of their current development workflow. This includes mapping who has access to GitLab Duo seats, identifying which repositories contain custom rules, and determining how developer settings are configured. Many organizations find that while GitLab Duo works well for basic autocompletion, GitHub Copilot offers more granular control over coding styles and architectural rules, particularly through repository-level instruction files.

## How to Transfer Repositories and Issues with GitHub Enterprise Importer

Moving repositories and historical issue data is the critical first step in the migration process. Rather than relying on manual exports or custom scripts, teams can use the GitHub Enterprise Importer. As of August 2026, the GitHub Enterprise Importer provides a generally available, self-service path to migrate repositories from GitLab.com and GitLab Self-Managed directly to GitHub Enterprise Cloud.

To perform the migration, developers use the GitHub CLI along with the specialized gl2gh command-line extension. The setup begins by installing and configuring the extension in a local terminal session.

Run this command to install the extension:
```bash
gh extension install github/gh-gl2gh
```

Once installed, the migration process is driven by environment variables that authenticate against both GitLab and GitHub. Specifically, the utility requires a GitLab personal access token with api and read_repository scopes, and a GitHub personal access token with repo, workflow, admin:org, and read:org scopes.

Configure the environment variables:
```bash
export GITLAB_PAT="your_gitlab_token"
export GH_PAT="your_github_token"
```

With the tokens configured, you can execute a migration command that targets a specific GitLab project and imports it into a target GitHub organization. The migration tool automatically exports the GitLab project as a compressed archive, stages the archive in secure storage, and imports it into GitHub.

Run the migration command:
```bash
gh gl2gh migrate-repo \
  --gitlab-org "your-gitlab-group" \
  --gitlab-repo "your-repository" \
  --github-org "your-github-org" \
  --github-repo "your-repository" \
  --use-github-storage
```

The --use-github-storage flag tells the importer to stage the migration archive temporarily in GitHub-owned blob storage. Alternatively, organizations can specify their own AWS S3 or Azure Blob storage accounts. It is important to note that the importer does not support delta migrations. To prevent data loss or drift, teams must freeze all write access to the source GitLab repositories before executing the final production migration.

User account mapping is another essential consideration. When migrating from GitLab to GitHub, developer usernames and emails might change. GitHub Enterprise Importer uses a mapping file, often a CSV layout, to associate GitLab accounts with the correct GitHub user accounts. Without this mapping, commit authorship and issue assignments may become unlinked or attributed to placeholder profiles, making historical tracing difficult.

## How to Convert GitLab CI/CD Pipelines to GitHub Actions

GitLab Duo relies on GitLab CI/CD for validation, security scanning, and deployment feedback. Because GitHub Copilot is designed to work alongside GitHub Actions, migrating requires converting existing GitLab pipeline files into GitHub Actions workflows. This means translating .gitlab-ci.yml at the root of your project into corresponding YAML files located in .github/workflows/.

The translation involves mapping GitLab concepts to GitHub Actions constructs. In GitLab, pipelines are structured around stages and jobs, while GitHub Actions uses workflows composed of jobs and steps. A basic test job in GitLab that runs on a custom runner must be refactored to use GitHub-hosted runners or self-hosted actions runner applications.

Consider this basic GitLab pipeline file (.gitlab-ci.yml):
```yaml
stages:
  - test
run_tests:
  stage: test
  image: node:20
  script:
    - npm install
    - npm test
```

To migrate this pipeline to GitHub Actions, you must create a new workflow file under .github/workflows/test.yml:
```yaml
name: Test Suite
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 20
      - name: Install Dependencies
        run: npm install
      - name: Run Tests
        run: npm test
```

During this conversion, developers can use GitHub Copilot Chat in their editor to accelerate the rewrite. By opening the original GitLab YAML file and prompting Copilot, developers can generate accurate GitHub Actions syntax. This utility is especially helpful when dealing with complex multi-stage pipelines that include environment variables, conditional checks, caching strategies, and artifact packaging.

Variables and secrets require special handling. GitLab CI/CD uses masked and protected variables, whereas GitHub Actions uses repository and environment secrets. During the transition, team leads must manually export GitLab CI/CD variables and recreate them as GitHub Actions secrets under repository settings. This transfer should be done securely, avoiding local file storage or plain text notes.

## How to Configure GitHub Copilot at the Organization and IDE Level

Once repository data and pipelines are moved to GitHub, administrators must configure GitHub Copilot at both the organization and developer level. Organization owners manage seat assignments, billing cycles, and global policies through the GitHub settings panel.

Global policies are critical for maintaining compliance. Administrators can enable or disable features such as public code matching, which prevents Copilot from suggesting code that matches public repositories. They can also configure which language models are available for Copilot Chat and determine whether developers can access Copilot features on mobile devices.

At the developer level, configuration requires updating the local IDE environment. Developers must perform the following actions:

Uninstall the GitLab Duo extension from VS Code, JetBrains, or Visual Studio to prevent shortcut conflicts and editor latency.

Install the official GitHub Copilot and GitHub Copilot Chat extensions.

Sign in to the IDE using the GitHub account associated with their organization seat.

To ensure consistent output across the engineering team, developers should set up repository-level configurations. GitHub Copilot supports workspace instructions via a .github/copilot-instructions.md file. By placing this markdown file at the root of the repository, teams can define coding standards, architectural rules, library versions, and documentation guidelines that Copilot will append to its system prompt.

Here is an example .github/copilot-instructions.md configuration:
```markdown
Custom Workspace Instructions:
Coding Standards:
- Use TypeScript for all backend logic.
- Prefer async/await over raw Promises.
Architectural Boundaries:
- Keep business logic isolated in the services directory.
- Database access must go through the repository layer.
```

These repository-specific instructions override individual user settings, ensuring that Copilot suggestions align with the team's established code style.

User-level settings allow individual developers to personalize their Copilot experience, such as specifying their preferred keyboard shortcuts, disabling autocomplete for specific file types, or setting custom instructions for Copilot Chat. While user-level settings follow the developer across all projects, the .github/copilot-instructions.md file enforces team-wide constraints.

## How to Manage Migration Runbooks and Artifacts in Shared Workspaces

During a platform-wide migration, teams must coordinate scripts, configuration files, and log files. While some organizations attempt to use local storage or raw AWS S3 buckets to store these assets, those alternatives lack version history and collaborative context. Other groups rely on general cloud storage tools like Google Drive, but these are built for human file sharing and do not connect to developer utilities or coding agents.

To coordinate these assets, teams can use [Fast.io workspaces](/product/workspaces/) to provide a persistent, shared workspace. Fast.io serves as a central hub where developers and automated agents can read and write files. Every organization starts with a 14-day free trial, which requires a credit card.

By placing migration runbooks in a [Fast.io workspace](/product/workspaces/), teams benefit from features designed for technical collaboration. With granular permissions, administrators can restrict access to sensitive migration tokens and configuration files at the organization, workspace, folder, or file level. The per-file version history tracks every modification, making it easy to revert errors if a script is altered.

Furthermore, developers can connect coding agents directly to Fast.io using the Model Context Protocol (MCP). The Fast.io MCP server allows agents to query migration documentation and upload logs.

To configure an agent to connect to Fast.io, add the server to your settings configuration file:
```json
{
  "mcpServers": {
    "fastio-workspace": {
      "url": "https://mcp.fast.io/mcp/key"
    }
  }
}
```

When Intelligence Mode is enabled on the workspace, Fast.io automatically indexes all incoming runbooks and log files, enabling semantic search. Developers and agents can query the workspace to extract dates, configuration schemas, or error patterns. For instance, teams can use [Metadata Views](/product/document-data-extraction/) to turn raw migration logs and repository inventories into a clean, queryable database without writing custom scripts.

Organizing migration assets in directories like /runbooks/, /scripts/, and /logs/ facilitates coordination. When a developer updates a shell script or a JSON mapping file in the /scripts/ directory, the per-file version history logs who made the edit. If a script behaves unexpectedly, teams can inspect the history and revert to a previous working version. Meanwhile, [Metadata Views](/product/document-data-extraction/) allow practice leads to view structural properties of migration assets, such as file owner, target repository, and conversion status, inside a clean database layout.

## How to Verify the Migration and Troubleshoot IDE Contexts

The final phase of the migration involves verifying that all code suggestions are functioning correctly and troubleshooting common editor issues. After developers install the GitHub Copilot extensions, they should verify their configuration.

If Copilot fails to generate suggestions, developers should check the extension logs in their IDE. In VS Code, this is done by opening the Output panel and selecting GitHub Copilot from the drop-down menu. Common issues include expired session tokens, proxy authorization blocks, and network firewall restrictions.

To troubleshoot proxy issues, ensure that your local development machine allowlists the required GitHub domains. If your network uses custom SSL certificates, configure the IDE to trust those certificates before launching the Copilot extension.

Once connection issues are resolved, developers can test Copilot's awareness of the migrated codebase. Open a file that depends on other modules in the project and start writing a function. Copilot should immediately suggest completions that respect the project's imports and the guidelines defined in .github/copilot-instructions.md. By verifying these IDE contexts, converting CI/CD pipelines, and using a shared workspace to manage migration assets, engineering organizations can complete the transition from GitLab Duo to GitHub Copilot successfully.

## Frequently asked questions

### Can I use GitHub Copilot with GitLab?

Yes, you can use GitHub Copilot with GitLab repositories. GitHub Copilot operates as an editor extension in IDEs such as VS Code, JetBrains, and Visual Studio. It generates suggestions based on the files open in your editor, regardless of where the repository is hosted. However, features like repository-level custom instructions require access to a GitHub Enterprise account.

### How do I migrate my GitLab repos to GitHub?

You can migrate repositories from GitLab to GitHub using the GitHub Enterprise Importer. The process utilizes the GitHub CLI and the gl2gh extension to export GitLab projects, stage them in secure storage, and import them into your target GitHub Enterprise organization. This tool automates the transfer of repository histories, branches, wikis, issues, and pull requests.

### Is GitHub Copilot better than GitLab Duo?

The choice between GitHub Copilot and GitLab Duo depends on your organization's toolchain. GitLab Duo is highly integrated into the GitLab ecosystem, making it a natural choice for teams that want a single-platform solution. GitHub Copilot offers more mature editor-level suggestions, support for custom repository instructions, and deep integration with GitHub Actions.

## About Fast.io

Fast.io provides shared workspaces where people and AI agents work on the same files, with built-in semantic search and citation-backed chat over what they hold. Agents reach it through a remote MCP server at https://mcp.fast.io/mcp, a REST API at https://api.fast.io/current/, and a command line client published on npm as @vividengine/fastio-cli.
