Qual é a diferença entre bifurcação e clonagem no GitHub?

186

Eu gostaria de saber as diferenças entre fazer um fork de um projeto e fazê- clonelo.

Só posso enviar solicitações pull via GitHub se bifurcar um projeto?

Steve Dunn
fonte
2
Possível duplicata de Os garfos git são realmente clones git?
j08691
2
Para pessoas que chegam aqui procurando uma explicação sobre "fork" com o Git (não no GitHub). Não existe um comando "fork" no Git. É mais um conceito do GitHub (não do Git). Uma distinção facilmente esquecida.
ambassallo

Respostas:

113

Basicamente sim. A forké apenas uma solicitação para o GitHub clonar o projeto e registrá-lo com seu nome de usuário ; O GitHub também monitora o relacionamento entre os dois repositórios, para que você possa visualizar os commits e pull entre os dois projetos (e outros garfos).

Você ainda pode solicitar que as pessoas retirem seu repositório clonado, mesmo que você não o utilize fork- mas você teria que lidar com disponibilizá-lo publicamente. Ou envie os patches dos desenvolvedores (consulte git format-patch) que eles podem aplicar às suas árvores.

michel-slm
fonte
4
Forks exigem muito mais trabalho para atualizar do que clones. Um clone pode ser atualizado com um simples git pull. Um garfo recebe vários comandos. E não é de surpreender, quase todos os garfos que olho estão desatualizados. Forks são como o problema do repositório Maven em esteróides. Em vez de um repositório desatualizado (Maven), existem milhares deles (Git).
JWW
@jww parece o melhor para ficar com o clone - por que usar o fork?
serup 16/01/19
@serup - o motivo é que a cópia bifurcada pode ser git pulleditada para que ainda exista algum tipo de relacionamento. Se você clonou a cópia inteira, está sentado em sua própria máquina local e desconectado do repositório original.
JonH 08/02/19
134

Quando você diz que está bifurcando um repositório, está basicamente criando uma cópia do repositório com seu ID do GitHub. O ponto principal a ser observado aqui é que quaisquer alterações feitas no repositório original serão refletidas de volta nos repositórios bifurcados (é necessário buscar e refazer o processo). No entanto, se você fizer alterações no seu repositório bifurcado, será necessário criar explicitamente uma solicitação de recebimento no repositório original . Se sua solicitação de recebimento for aprovada pelo administrador do repositório original , suas alterações serão confirmadas / mescladas com a base de código original existente . Até lá, suas alterações serão refletidas apenas na cópia que você bifurcou .

Em resumo:

O Modelo Fork & Pull permite que qualquer pessoa bifurque um repositório existente e faça alterações em seu fork pessoal sem exigir que o acesso seja concedido ao repositório de origem. As alterações devem ser puxadas para o repositório de origem pelo mantenedor do projeto.

Observe que, após a bifurcação, você pode clonar seu repositório (aquele abaixo do seu nome) localmente na sua máquina. Faça alterações e envie-o para o seu repositório bifurcado. No entanto, para refletir suas alterações no repositório original, sua solicitação de recebimento deve ser aprovada.

Algumas outras discussões interessantes -

Os garfos git são realmente clones git?

Como atualizo um repositório bifurcado do GitHub?

Aniket Thakur
fonte
24
"O ponto principal a ser observado aqui é que quaisquer alterações feitas no repositório original serão refletidas de volta nos repositórios bifurcados". Isso é um pouco enganador, eu acho. AFAIK, as alterações feitas no repositório original após o fork não são refletidas automaticamente no fork; você precisa mover essas alterações manualmente. As alterações que ocorreram antes da bifurcação são copiadas para a nova bifurcação quando você clica no botão da bifurcação.
Ajedi32
"quaisquer alterações feitas no repositório original serão refletidas nos seus repositórios bifurcados" .. realmente? Espero não automaticamente
KansaiRobot 16/02
Eu estava trabalhando no projeto de um cliente e usando o modelo de clonagem e push para o trabalho. Um dia eu bifurquei e imediatamente recebi uma mensagem dizendo qual é a necessidade de fazer o repo completo. Eu realmente não entendo como isso é considerado errado?
user3075740
as alterações feitas no repositório original após a bifurcação não são refletidas automaticamente na bifurcação, mas, para fazer isso, verifique a etapa 3 deste blog: - help.github.com/articles/fork-a-repo
Suhas Chikkanna
"quaisquer alterações feitas no repositório original serão refletidas nos repositórios bifurcados" - você quer dizer que isso não é possível depois que clonamos?
variável
26
  • O projeto bifurcado está no seu repositório online (repositório).
  • O projeto clonado está na sua máquina local (eu costumo clonar depois de fazer o repo).

Você pode confirmar em seu repo online (ou confirmar em seu repo local e, em seguida, enviar para o repo online) e enviar solicitação de recebimento.

O gerente de projeto pode aceitá-lo para obter suas alterações em sua principal versão online.

Alisa
fonte
13

Um clone é onde você tem duplicação e separação adequadas entre duas versões (possivelmente diferentes) de um repositório. Quando um repo é alterado, o novo conteúdo deve ser copiado ativamente para o outro repo usando um comando push. E as mudanças no outro repositório foram buscadas.

Quando você divide um repositório, em um servidor, não há necessidade de duplicação de conteúdo, porque os dois repositórios usarão o mesmo conteúdo [objeto fixo] desse mesmo servidor. O 'truque' é gerenciar os diferentes pontos de vista do usuário, para que cada usuário acredite ter uma cópia pessoal completa do repositório. Empurra e busca entre garfos é simplesmente atualiza os ponteiros do usuário.

Em um nível inferior, o git faz a mesma coisa internamente. Se você tiver três arquivos diferentes, cada um contendo Hello World, o git simplesmente 'bifurca' sua cópia única do blob Hello World e a oferece em cada um dos três locais, conforme necessário.

A capacidade de bifurcar no servidor significa que a grande permissão de armazenamento do Github não é tão grande, em média, pois cada corpo compartilha o único repositório subjacente.

Philip Oakley
fonte
5

Em poucas palavras, o Forking é talvez o mesmo que "clonar sob o seu ID / perfil do GitHub". Um fork é a qualquer momento melhor que um clone, com algumas exceções, obviamente. O repositório bifurcado está sempre sendo monitorado / comparado com o repositório original, diferentemente de um repositório clonado. Isso permite rastrear as alterações, iniciar solicitações pull e também sincronizar manualmente as alterações feitas no repositório original com o seu bifurcado.

Farhan Haque
fonte
5

Enquanto a resposta de @ AniketThakur é muito boa. Ninguém respondeu à seguinte pergunta ainda.

Só posso enviar solicitações pull via GitHub se bifurcar um projeto?

Não. Se você é um colaborador de um repositório, pode: Criar um clone local. Faça uma filial local. Adicionar confirmações a esse ramo. Envie a ramificação local de volta ao github (criando uma ramificação remota no processo). Faça uma solicitação de recebimento solicitando que essa ramificação seja mesclada na ramificação principal (ou na ramificação que você desejar).

Theodore Norvell
fonte
3

Caso você tenha feito o que o questionador sugeriu (esqueceu de bifurcar e clonou localmente um repo, fez alterações e agora precisa emitir uma solicitação de recebimento), você pode voltar aos trilhos:

  1. bifurcar o repositório para o qual você deseja enviar a solicitação pull
  2. envie as alterações locais para o controle remoto
  3. emitir solicitação de recebimento
Princesa Ruthie
fonte
2

Outra diferença sutil estranha no GitHub é que as alterações nos garfos não são contadas no log de atividades até que as alterações sejam inseridas no repositório original. Além disso, para transformar um fork em um clone adequado, você deve entrar em contato com o suporte do Github, aparentemente.

De Por que minhas contribuições não estão aparecendo :

O commit foi feito em um fork

As confirmações feitas em uma bifurcação não contam para suas contribuições. Para fazê-los contar, você deve executar um dos seguintes procedimentos:

Abra uma solicitação de recebimento para que suas alterações sejam mescladas no repositório pai. Para desconectar o fork e transformá-lo em um repositório independente no GitHub, entre em contato com o Suporte do GitHub . Se o garfo possuir garfos próprios, informe o suporte se os garfos devem se mover com seu repositório para uma nova rede ou permanecer na rede atual. Para mais informações, consulte " Sobre garfos ".

BJennings
fonte
2

Em poucas palavras, "fork" cria uma cópia do projeto hospedado em sua própria conta do GitHub.

"Clone" usa o software git no seu computador para baixar o código-fonte e todo o histórico de versões desse computador

Testilla
fonte