diferença entre garfo e ramo no github

127

Se eu bifurcar um projeto hospedado no github. Eu bifurco todos os galhos? Como sei em qual ramo meu garfo se baseia? Em outras palavras, qual ramo será baixado no meu PC?

Jonathan.
fonte
1
Explicação simples em inglês: Um galho é como um garfo que é de um garfo pai. Um garfo é como um galho que não possui um galho-pai.
Ken Kin

Respostas:

41

Todas as ramificações no GitHub serão copiadas em uma bifurcação. (Obviamente, isso não inclui ramificações que nunca foram enviadas para o GitHub.)

Mas um fork é uma operação do GitHub para o GitHub; nada é copiado para o seu PC. Não é exatamente o mesmo que um clone do Git . Se você deseja perguntar "o que é copiado quando clono um projeto?", Consulte o manual git-clone(1).

JC Salomon
fonte
153

Pense desta maneira:

O repositório corresponde ao trabalho colaborativo da equipe em um ou mais ramos. Todos os colaboradores têm sua própria cópia.

Cada garfo do repositório principal corresponde ao trabalho de um colaborador. Um fork é realmente uma construção do Github (não do Git) para armazenar um clone do repositório em sua conta de usuário. Como um clone, ele conterá todas as ramificações no repositório principal no momento em que você fez o garfo.

Cada ramificação dentro do fork e / ou no repositório principal pode corresponder a vários tipos de coisas, dependendo de como você deseja trabalhar. Cada ramificação pode se referir a uma versão do projeto, mas também pode corresponder a diferentes canais de desenvolvimento, como hotfixes ou trabalho experimental.

A solicitação de recebimento (no ecossistema do GitHub) corresponde à tarefa. Sempre que desejo contribuir com uma tarefa finalizada isolada para o repositório principal, crio uma solicitação de recebimento correspondente às confirmações feitas nessa tarefa. Esses commits são retirados do meu fork ou meu branch para o repositório principal .

Uma confirmação é um conjunto de alterações no código. Essa é uma das coisas mais interessantes sobre o Git. Você não transfere arquivos, transfere logs de alterações.

Adam Grant
fonte
4
gostei de como você explicou todos os bits relacionados relevantes, como o mapeamento de solicitação pull para fork / branch. "você não transfere arquivos, transfere logs de alterações" ... eu já sabia disso, mas essa frase é perfeita!
harshvchawla
2
mais um para esclarecer que o garfo é um github, não um git. Obrigado!
emery.noel
10

Fork é um clone no lado do GitHub (clona tudo).
Quando você está clonando um repositório, está obtendo todo o histórico desse repositório, com todas as suas ramificações.

Embora, em teoria, você possa alterar a ramificação padrão de um repositório remoto , um clone de um repositório GitHub procura principalmente o ramo mestre. Significando alterar a ramificação "padrão" que um clone do GitHub obterá, é necessário renomear a ramificação principal.

VonC
fonte
Então, quando clono o repositório bifurcado (faça o download para o meu PC com eficiência), todas as ramificações estão no meu PC? Mas em um ramo arquivos adicionais foram adicionados. Então, meu PC terá esses arquivos ou não?
Jonathan.
1
@ Jonathan: seu PC terá todos os ramos com todos os arquivos. Mas seu diretório de trabalho (o espaço em que você faz check-out de uma dessas ramificações) será o único espaço em que você verá esses arquivos.
VonC 15/02/11
Então, onde os outros arquivos serão realmente armazenados na pasta .git?
Jonathan.
@ Jonathan: como objetos soltos ou compactados, consulte book.git-scm.com/7_how_git_stores_objects.html (objetos sendo um blob (seus "arquivos"), uma árvore, um commit ou uma tag: book.git-scm.com/ 1_the_git_object_model.html )
VonC 15/02
4

Se você bifurcar um projeto, estará fazendo uma cópia de todo o projeto na sua conta do git hub. você não está lidando com nada no seu PC

Para fazer uma cópia no seu PC, você deve cloná-la e puxar todas as coisas, e você terá todos os ramos e códigos desse projeto

Caçar
fonte
2

Se você criar uma bifurcação de um projeto no site do Github, obterá todas as ramificações do projeto upstream.

Se você clonar do garfo recém-formado no computador local, o origincontrole remoto apontará para o ramo principal do garfo no Github.

bhamby
fonte
De acordo com a página Help.GitHub Bifurcando um projeto , criar a upstreamramificação é algo que você deve fazer; e eles dizem como fazer isso.
JC Salomon
2
Isso é um controle remoto, não um ramo.
Arrowmaster
1

Isso pode ser explicado muito bem. Você tem um repositório central no GitHub. Sempre que você clica no seu computador pessoal para fazer algumas alterações, esse clone local do repositório principal é chamado de fork.

O ramo é algo diferente e está incluído no fork / repo. Na verdade, o ramo é o seu trabalho em diferentes estágios de desenvolvimento. Eles são criados como e quando necessário para salvar um conjunto de funcionalidades, fornecer acesso a diferentes usuários, demonstrar o site ao cliente etc.

Avinash Thombre
fonte
1

Gostaria de compartilhar um exemplo da vida real de quando usamos Ramos e quando usamos Forks

Temos o GitLab em nossa loja e, às vezes, precisamos trabalhar nos pacotes de um projeto do Laravel. Normalmente, criamos uma ramificação e enviamos alterações para a ramificação que testamos em nosso ambiente de desenvolvimento de VM local ao trabalhar com o projeto Laravel real.

Digamos que nosso projeto esteja localizado em

https://github.com/yardpenalty/mainproject.git

Uso da filial:

Vamos dizer que o ramo é chamado It_doesnt_matter

Uma vez que tenhamos nossa ramificação da maneira que queremos para produção, faremos nosso push final para essa ramificação e criaremos uma solicitação de mesclagem que será enviada ao UAT para teste.

A mesclagem da It_doesnt_matter ramificação agora é enviada para o projeto mestre

às https://github.com/yardpenalty/mainproject.git

Digamos que o projeto do pacote esteja localizado em

https://github.com/yardpenalty/mypackage.git

Lembre-se de que o projeto principal usa esse pacote na produção, portanto não podemos fazer alterações simplesmente empurrando-os para este pacote (entre outros motivos). Digamos que um desenvolvedor da Web precise editar este pacote para fazer alterações na produção.

Uma ramificação simples também não funciona porque não podemos ver nossas alterações sem publicar o pacote etc.

Uso do garfo: agora é quando precisamos fazer um pouco de truque com o nosso pacote, para criar um clone do pacote de produção por meio de um garfo. Os arquivos composer.json podem ser atualizados para apontar para a bifurcação que agora está localizada no caminho de Usuário ou Grupo

Então, vamos criar uma bifurcação https://github.com/yardpenalty/mypackage.git

e chame https://github.com/yardpenalty/yards/mypackage.git

Agora podemos atualizar nosso arquivo composer.json para apontar para este pacote em nossos "repositórios": [array como tal e vamos lá!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

yardpenalty.com
fonte