Saltar para o conteúdo

Configurando Mirror entre repositórios: GitHub para GitLab

março 20, 2026

Aprenda o que é um Mirror de repositórios e a como configurar um de forma rápida

landscape

Afinal, o que é um Mirror de repositórios?

Imagine que você trabalha em uma empresa de Desenvolvimento de Software, e junto com a sua equipe vocês desenvolveram uma solução para um cliente da Companhia, e agora ele deseja ter acesso ao código fonte da aplicação. Como você faria isso? Existem muitas maneiras de passar esse acesso, e uma delas é o Mirror. Com ele, você faz de fato um espelhamento(Mirror), onde criamos um repositório em branco (em nosso exemplo, na conta do cliente), e ele será atualizado com todo o código e futuras mudanças de um repositório já existente(repositório da empresa).

Passo a passo para configurar o seu Mirror

É importante ressaltar que existem várias maneiras de fazer um Mirror com o repositório de origem estando on Github. Nesse tutorial irei utilizar o Github actions para realizar essa tarefa.

1. Criando a pipeline em seu projeto de origem

Crie o a seguinte estrutura de arquivos na raiz do seu projeto:

.github/workflow/mirror.yml

.github e workflows são duas pastas, então caso essa estrutura já exista em seu projeto, apenas crie um arquivo com a extensão .yml dentro delas.

Dentro do arquivo mirror.yml, adicione o seguinte código:

name: Mirroring

on: [push, delete]

jobs:
  to_gitlab:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: pixta-dev/repository-mirroring-action@v1
        with:
          target_repo_url:
            git@gitlab.com:ViniciusCassemira/mirror.git
          ssh_private_key:
            ${{ secrets.GITLAB_SSH_PRIVATE_KEY }}

Note

Para o tutorial não se estender desnecessariamente, não irei explicar sobre o código acima, sobre o que é uma pipeline dentro de um projeto ou até mesmo sobre o Github Actions. Se você está aqui para saber como realizar um Mirror Github > Gitlab, provavelmente já tem uma noção básica sobre esses conceitos.

De forma resumida, toda vez que o projeto receber um push ou delete, todo o código da aplicação será clonado, e depois enviado para o endereço do repositório que estiver em:

[...]
target_repo_url:
            git@gitlab.com:ViniciusCassemira/mirror.git # Url do repositório de destino
[...]

Altere esse valor para a Url do seu projeto de destino, então caso você ainda não tenha esse criado, realize essa configuração.

2. Criando chaves SSH de acesso ao repositório de destino

Para a pipeline que configuramos anteriormente possa acessar o nosso projeto de destino, esse precisa ter configurado uma Deploy Key, e nossa pipeline dentro do Github deve usar a chave privada para se autenticar no repositório de destino.

Crie as chaves utilizando o seguinte comando:

ssh-keygen -t ed25519 -C "mirror-action" -f "./mirror_key"

landscape
Gerando chaves de autenticação via ssh-keygen

3. Configurando chave privada no repositório de origem

Agora que possuímos as chaves privadas e públicas, vamos terminar a configuração da nossa pipeline no repositório de origem. Acesse essa área em seu projeto no Github e clique em New repository secret:

landscape
Acessando os Secrets and variables de um projeto

Configure a tela seguinte dessa forma:

Name: Mesmo nome que configuramos em nossa pipeline, quando ela for executada irá buscar esse secret com base em seu nome

Secret: Valor da chave privada mirror_key que criamos anteriormente. Não vou mostrar ela no tutorial porque não quero que alterem o meu repositório de destino.

landscape
Adicionando valor da chave privada e salvando secret

Após configurar esses dois valores, clique em Add secret.

A configuração do nosso repositório de origem foi finalizada. Agora vamos para o Gitlab

4. Configurando chave pública no repositório de destino

Acesse essa área em seu repositório no Gitlab e clique em Add new Key:

landscape
Acessando área de Repository settings no projeto do Gitlab

Agora, configure a próxima tela da seguinte forma:

Title: Qualquer um, desde que faça você se lembrar da origem dessa configuração.

Key: Valor da chave pública mirror_key.pub que configuramos no 2º passo desse tutorial.

Grant write permissions on this key: Habilite essa opção

landscape
Salvando Deploy Key

Clique em Add Key para salvar a configuração.

Para evitar conflitos na hora do Mirror, prefira usar um projeto de destino vazio, em branco.

5. Verificando branchs protegidas

Talvez a pipeline no github não consiga atualizar em branchs protegidas em seu Gitlab. Para o meu caso, eu resolvi ativando a seguinte opção em meu projeto no Gitlab:

landscape
Ativando opção de Force Push em Branchs do projeto de Destino

6. Testando Mirror

Agora que já configuramos ambos os projetos, vamos testar a execução da nossa Pipeline. Suba no projeto de Origem as mudanças que fizemos no 1º passo, e veja a mágica acontecer!

landscape
Tela dos workflows executados no projeto de origem

landscape
Histórico de commits no Github

landscape
Histórico de commits no Gitlab

Última modificação