Excluir dependência de fork de um repositório GitHub


206

Como posso fazer o GitHub esquecer ou desassociar que meu repositório era originalmente uma bifurcação de outro projeto?

Eu criei um projeto no GitHub. Agora posso ver "bifurcada de qualquer coisa / qualquer coisa". O repositório pai "Whatever / Whatever" não é mais mantido. Foi-me permitido continuar usando a base de código do repositório original para criar um repositório independente.

Existe uma maneira de desanexar meu projeto do repositório original?

Respostas:


175

Você pode entrar em contato com o suporte do github e pedir que eles mudem seu repositório para o "modo normal".

Por esta página , "Entrega foi feita em um garfo" parágrafo, é explicado que um tem que ir através do apoio ao switch. Portanto, é provável que não há nenhuma maneira de fazer isso por si mesmo (a menos que você destruir e recriar a sua repo que é explicado antes ... se você por isso tome cuidado se você tiver bilhetes ou um wiki anexado ao seu projeto como eles vão ser excluído!).


31
Posso confirmar que o suporte contactar funciona perfeitamente, além de muitas vezes eles respondem em questão de horas :-)
BenC

1
A página vinculada não contém mais as informações declaradas.
precisa

3
@MattBrennan A página mudou, mas a última seção ainda inclui: "Para desanexar o fork e transformá-lo em um repositório independente no GitHub.com ou no GitHub Enterprise, entre em contato com o suporte do GitHub ou com o administrador do site, respectivamente."
Thomas Moulard 23/10

1
Super rápido .. eles me responderam em 1 hora. Obrigado
myDoggyWritesCode

2
No Github Enterprise, você pode encontrá-lo agora em admin-> Colaboração-> Rede e, dependendo do seu caso de uso, deve usar 'Criar Raiz', 'Desanexar' ou 'Extrair'.
Kutzi # 02/19

45

Você pode duplicar o repositório bifurcado em um novo repositório (sem a dependência da bifurcação) da interface do usuário do github e remover o original bifurcado:

  • Faça login no github
  • Selecione o sinal + no canto superior direito e Importar repositório .
  • Importe seu repositório bifurcado. O novo repositório não terá a dependência do fork.
  • Exclua o repositório bifurcado original nas configurações do repositório.

1
Este foi o mais fácil e o que funcionou para mim :). Muito esperto.
Moxi

1
Alguém mais teve um problema com o recurso de importação "pendurado"? O meu está em "Detectando o sistema de controle de versão do seu projeto ..." por cerca de 5 horas. Não tenho certeza se estou sendo enfileirado ou se é um travamento real. O repo é pequeno. Tentou deixá-lo durante a noite apenas no caso de eu estar em uma linha.
Benjamin West

Finalmente fiquei curioso e apenas cliquei em "cancelar". Clicar em cancelar permitiu ignorar a detecção de VCS e apenas importar o código / confirma / ramifica etc. Esse foi o caso ao importar o Github -> Github. A importação pode não ter sido interrompida se eu fosse de um VCS diferente? Não tenho certeza. Observe também que, ao fazer isso com um segundo repo, tive que cancelar duas vezes para que funcionasse. Se a CLI copiar todos os mesmos dados que possam ser um método melhor, mas espero que isso ajude outras pessoas que escolheram essa rota.
Benjamin West

9
Só para esclarecer, essa abordagem não preservará problemas e não receberá solicitações.
golopot 26/07/19

Funciona como charme! Obrigado, você é um salva-vidas! :)
omnimind 26/11/19

44

Certifique-se de ter todas as ramificações e tags importantes em seu repositório local, exclua o repositório github, recrie o repositório pelos meios usuais (sem bifurcação) e empurre o repositório local novamente git push --all. Observe que, se você tiver ramificações locais que não deseja publicar, pode valer a pena criar um clone local limpo temporário para a operação.

No entanto, isso também irá livrar-se do wiki e dos problemas. Como o wiki é de fato seu próprio repositório, ele pode ser tratado da mesma forma clonando-o e, em seguida, recriando e pressionando. O endereço de repo está na página de acesso Git do wiki ( git@github.com:user/repo.wiki.git).

Isso deixa problemas. Eles podem ser exportados por meio da API , mas, tanto quanto eu sei, você só pode criar problemas e comentários com sua pessoa, portanto, é impossível importá-los perfeitamente.

Portanto, se você precisar que os problemas sejam preservados, você deve passar pelo suporte do github, como sugere Thomas Moulard.


Dependendo de quantos problemas existem, pode ser possível transferi-los um por um para o novo repositório antes de excluir do antigo da Web ( help.github.com/en/github/managing-your-work-on- github /… ). Eu acho que um determinado indivíduo pode transferir mais de 100 problemas por hora - não é divertido, mas para muitos repositórios é algo viável.
Suma

22

Eu tive o problema semelhante e acabei usando esta página de ajuda do github para resolvê-lo. Eu não me importei com o rastreador de wiki e problemas, como era para o meu blog usando um tema desenvolvido por outro usuário.

Para desanexar um repositório bifurcado e usá-lo como seu após várias confirmações sem perder toda a história:

git clone --bare git@github.com:user/forked_repo.git

Crie uma nova repositório vazio new-repositoryno site do github. E empurre uma versão espelhada:

cd user.github.com.git/

git push --mirror git@github.com:user/new-repository.git

É possível renomear no github, forked_repositorycom outro nome para mantê-lo como backup e verificar as atualizações, se necessário. Ou simplesmente exclua-o.

Renomear new-repositorypara o nome original faz o trabalho. Como efeito colateral, seus commits agora aparecem no seu histórico.


11

Isso se aplica apenas ao GitHub Enterprise, não no github.com

Conectado a uma conta que tenha privilégios de administrador:

  1. Vá para o repositório que você precisa desanexar: https://<ghe url>/<org>/<repo>
  2. Clique no foguete "Site Admin" no canto superior direito
  3. Clique em "Colaboração" na barra de menus superior
  4. Clique em "Rede" no painel esquerdo
  5. Clique em "Criar raiz" no painel Estrutura da rede
  6. Aceitar

Isso foi testado no GitHub Enterprise 2.9


Dependendo do seu caso de uso, 'Desanexar' ou 'Extrair' pode ser mais apropriado. Acho 'Make Root' um pouco estranho, pois basicamente inverte a atual direção root-> child. (Github Enterprise 2.17)
Kutzi

10

Usando as informações de aurelien e Clayton , consegui fazer o seguinte:

$ git clone --bare https://github.com/my/forked_repo.git
<delete forked_repo on GitHub>
<recreate repo on GitHub using same name>
$ cd forked_repo.git
$ git push --mirror

Aqui está a documentação paragit clone --bare :

Faça um repositório simples do Git. Ou seja, em vez de criar <directory>e colocar os arquivos administrativos <directory>/.git, faça o <directory>próprio $GIT_DIR. Obviamente, isso implica o -n porque não há lugar para verificar a árvore de trabalho. Além disso, as cabeças de ramificação no controle remoto são copiadas diretamente para as cabeças de ramificação locais correspondentes, sem as mapear refs/remotes/origin/. Quando essa opção é usada, nem ramificações de rastreamento remoto nem as variáveis ​​de configuração relacionadas são criadas.

Aqui está a documentação paragit push --mirror :

Em vez de nomear cada árbitro para empurrar, especifica que todos os refs sob refs/(o que inclui, mas não está limitado a refs/heads/, refs/remotes/, e refs/tags/) ser espelhado para o repositório remoto. As refs locais recém-criadas serão enviadas para a extremidade remota, as refs atualizadas localmente serão atualizadas à força na extremidade remota e as refs excluídas serão removidas da extremidade remota. Esse é o padrão se a opção de configuração remote.<remote>.mirrorestiver definida.

Nota: como as outras gitrespostas baseadas, isso não será copiado sobre problemas que não fazem parte do gitrepositório, como o wiki e os problemas. Por Tapio:

  • O wiki é um repositório Git separado e pode ser tratado de maneira semelhante por Tapio. O endereço é: git@github.com:user/repo.wiki.git.
  • Os problemas podem ser exportados por meio da API do GitHub, mas há problemas para recriá-los, pois eles só podem ser criados pelo usuário, portanto, as importações perderão informações.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.