Repositório Git bifurcado de GitHub para GitLab

99

Suponha que eu queira implementar uma correção para um projeto de outra pessoa. Esse projeto reside no GitHub.

Eu poderia criar um fork no GitHub e implementar a correção.

No entanto, gostaria de criar meu fork no GitLab em vez de no GitHub.

Isso é possível? Quão?

Eu li este artigo: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

De qualquer forma, não tenho certeza do que devo fazer no meu caso.

  • Devo apenas criar um fork no GitLab do projeto do GitHub de alguma forma?
  • Ou devo criar um espelho no GitLab do projeto do GitHub?
  • Ou devo criar um espelho no GitLab e então fazer um fork do espelho?
  • Ou devo fazer algo completamente diferente?

Qual é a abordagem correta.

Obrigado.

ATUALIZAR

O espelhamento de repositório no GitLab provavelmente não faz sentido. Posso criar um espelho do MEU repositório GitHub no GitLab, mas não posso criar um espelho de um repositório de outra pessoa.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Isso é o que eu fiz até agora:

Clonei o projeto GitHub original para minha máquina local. Eu confirmei a correção para um novo branch em meu repositório local. Criei um projeto vazio no GitLab. Eu configurei a origem em meu repositório local para aquele projeto vazio no GitLab e enviei os dois branches para o GitLab. Eu configurei o upstream em meu repositório local para o repositório GitHub.

Quando quero obter novos commits do repositório GitHub original para o repositório no GitLab (ou seja, sincronizar os repositórios), posso fazer isso usando meu repo local como uma etapa intermediária. No entanto, não há conexão direta entre o repo no GitHub e o repo no GitLab. Minha configuração está correta? Há alguma diferença se eu fizer um fork no GitHub?

Cimlman
fonte

Respostas:

130

Se você deseja apenas rastrear as alterações, primeiro crie um repositório vazio no GitLab (ou qualquer outra coisa que você esteja usando) e clone-o em seu computador.

Em seguida, adicione o projeto GitHub como o remoto " upstream " com:

git remote add upstream https://github.com/user/repo

Agora você pode buscar e puxar do upstream caso haja alguma alteração. (Você também pode enviar por push ou mesclar a ele se tiver direitos de acesso).

git pull upstream master

Por fim, volte para seu próprio repositório GitLab:

git push origin master

Se você não quiser puxar manualmente a origem upstream / push, o GitLab oferece uma capacidade de espelhamento em Configurações => Repositório => Repositórios de espelhamento.

Chris Watts
fonte
15
Gostaria apenas de complementar esta resposta explicando por que essa é a abordagem correta. "Bifurcação" é um conceito criado pelo GitHub, portanto, só existe no GitHub, mas útil. Se você considerar o próprio git puro (como um servidor git puro em execução em algum lugar da sua rede), seria como clonar o repo em seu próprio servidor e, em seguida, cloná-lo em seu computador local. Você adicionaria o repositório original como o upstream localmente. Eu acredito que é isso que o GitHub faz nos bastidores.
Bruno Finger
9
Só quero acrescentar que bifurcação faz existir em gitlab, veja aqui , por exemplo.
bellackn de
1
Tive que usar: pull upstream master --allow-unrelated-histories
hmojtaba
Como você envia uma solicitação pull posteriormente?
Erik Aronesty de
1
@ErikAronesty Isso é mais complicado, já que "Pull Requests" não são uma coisa do git, e sim do GitHub. Uma maneira de fazer isso é fazer um fork de uma cópia no GitHub e adicionar seu repositório bifurcado como outro remoto, por exemplo git remote add upstream-fork [email protected]:myuser/repo. Em seguida, é apenas uma questão de git push upstream-fork masterenviar sua solicitação de pull por meio do site do GitHub.
Chris Watts,
18

A maneira exclusiva do navegador:

  1. Crie um novo projeto no Gitlab (basta um projeto vazio com um nome)
  2. Vá para Configurações -> Repositório
  3. Digite o URL do GitHub em 'Repositórios de espelhamento'
  4. Certifique-se de que 'direção do espelho' é 'Puxar'
  5. Pressione o botão 'Repositório de espelho'
  6. Pressione o ícone de sincronização ao lado da entrada que aparece
aksh1618
fonte
Não tenho a licença Enterprise Edition, ou seja, não consigo ver "Repositórios de espelhamento" da etapa 3. De qualquer forma, se eu tivesse essa licença, poderia criar um espelho de um repositório GitHub de outra pessoa?
Cimlman
1
@Cimlman Isso é estranho, porque também tenho uma licença gratuita. Talvez verifique novamente? Deve ser o terceiro em 'Configurações-> Repositório'. Só para ficar claro: as configurações na barra lateral, não no menu do perfil.
aksh1618
Depois de clicar em Configurações -> Repositório na barra lateral, posso ver as seções Ramificações protegidas, Tags protegidas, Implementar Chaves, Implementar Tokens.
Cimlman
2
@Cimlman Você está usando uma instância personalizada / local do gitlab? Tenho muito mais opções em minha conta pessoal básica em gitlab.com
aksh1618
1
Estamos usando uma instalação autogerenciada, versão 10.7.2. A versão mais recente é 11.6. OK, este é um bom ponto. :) Não posso tentar sua solução em nosso GitLab. De qualquer forma, o problema está obsoleto para mim agora. Era tudo sobre nossa correção de bug personalizada de uma biblioteca de terceiros. No entanto, a correção do bug já foi incorporada ao lançamento oficial dessa biblioteca.
Cimlman
0

É possível bifurcar um repositório github privado.

  1. Clique em novo projeto
  2. Selecione Importar
  3. Selecione github
  4. OAuth2 usado para autenticar e criar automaticamente o aplicativo gitlab
  5. Selecione o projeto para bifurcar

^ Acabei de fazer isso com um repositório privado no github, importado com sucesso (ramos inc etc.). O projeto importado é automaticamente mantido privado;)

Daithí
fonte
2
A importação do projeto requer um "token de acesso pessoal". Tentei gerar um no GitHub. Parece que esse recurso é útil quando desejo criar um projeto no GitLab a partir do meu projeto no GitHub. Esta suposição está correta? A questão é sobre criar um projeto GitHub de outra pessoa.
Cimlman
2
-1 porque, e como afirma o comentário anterior, a questão é sobre a bifurcação de um projeto github de outra pessoa. As instruções nesta resposta não funcionarão nesse caso.
Nikos Alexandris
1
@NikosAlexandris tem certeza? Você não pode criar um token de acesso para sua conta e acessar o repositório de outra pessoa ao qual você tem acesso de leitura? (por exemplo, cada repo público)
DGoiko
0

Em vez de bifurcar, você pode importar qualquer repositório GitHub disponível publicamente usando apenas a interface da web:

  1. No painel do GitLab, clique em Novo projeto
  2. Mudar para o projeto Import guia
  3. Clique no botão Repo por URL
  4. Preencha o "URL do repositório Git" e os campos restantes do projeto
  5. Clique em Criar projeto para iniciar o processo de importação
  6. Depois de concluído, você será redirecionado para o projeto recém-criado

Usei essa técnica recentemente e ela funciona em qualquer repositório público, mesmo sem uma conta do GitHub. Consulte esta página de documentos do GitLab para obter a fonte de informações.

Koceka
fonte
1
ESTÁ BEM. E se novos commits forem adicionados ao repositório original no GitHub, posso simplesmente mesclar as alterações no repositório no GitHub? Esta é uma operação complicada e talvez não possa ser feita sem um repositório intermediário (consulte o último parágrafo da questão).
Cimlman