LogoLogo
  • Git e GitHub para Humanos
  • Sumário
  • 1. Antes de Começar
    • 1.1 Este livro é para você?
    • 1.2 A razão por trás deste livro
    • 1.3 Visão geral
    • 1.4 Sobre o GitHub
    • 1.5 Sobre a Cumbuca Dev
    • 1.6 O maravilhoso mundo do open source
    • 1.7 Mapa do livro
    • 1.8 Glossário: capítulo 1
  • 2. Fundamentos de Controle de Versão e Git
    • 2.1 Introdução a sistemas de controle de versão
      • 2.1.1 Sistemas de controle de versão centralizados
      • 2.1.2 Sistemas de controle de versão distribuídos
    • 2.2 Introdução ao Git
    • 2.3 Conceitos Fundamentais do Git
      • 2.3.1 Repositório
      • 2.3.2 Commit
      • 2.3.3 Branch
      • 2.3.4 Merge
    • 2.4 Instalando o Git
      • 2.4.1 Instalando no Linux
      • 2.4.2 Instalando no macOS
      • 2.4.3 Instalando no Windows
    • 2.5 Interagindo com o Git
    • 2.6 O Comando Git
    • 2.7 Inicializando de um Repositório Local
    • 2.8 Configurando de um Repositório Local
    • 2.9 Links Úteis: Capítulo 2
    • 2.10 Glossário: Capítulo 2
  • 3. Operações Locais Básicas no Git
    • 3.1 Explorando Operações Locais do Git
    • 3.2 Salvando Alterações Localmente
      • 3.2.1 Adicionando Arquivos ao Controle de Versão via `git add`
      • 3.2.2 Verificando o Estado do Repositório via `git status`
      • 3.2.3 Criando Commits via `git commit`
      • 3.2.4 Visualizando o Histórico do Repositório via `git log`
      • 3.2.5 Comparando Alterações via `git diff`
      • 3.2.6 Unindo os Pontos
      • 3.2.7 Exemplo Prático
    • 3.3 Trabalhando com Branches Localmente
      • 3.3.1 Gerenciando Branches via `git branch`
      • 3.3.2 Alternando Entre Branches via `git switch`
      • 3.3.3 Mesclando Branches via `git merge`
        • 3.3.3.1 Resolvendo Conflitos de Merge
      • 3.3.4 Unindo os Pontos
      • 3.3.5 Exemplo Prático
    • 3.4 Links Úteis: Capítulo 3
    • 3.5 Glossário: Capítulo 3
  • 4. Ajuste de Mudanças Locais no Git
    • 4.1 Desfazendo Alterações Localmente
      • 4.1.1 Desfazendo Alterações Antes do Commit
      • 4.1.2 Desfazendo Commits
      • 4.1.3 Alterando o Último Commit via `git commit --amend`
      • 4.1.4 Unindo os Pontos
      • 4.1.5 Exemplos Práticos
    • 4.2 Ignorando e Removendo Arquivos do Rastreamento Local
      • 4.2.1 Ignorando Arquivos do Rastreamento Utilizando o arquivo .gitignore
      • 4.2.2 Removendo Arquivos do Rastreamento via `git rm`
    • 4.3 Links Úteis: Capítulo 4
    • 4.4 Glossário: Capítulo 4
  • 5. Introdução ao GitHub
    • 5.1 Qual a diferença entre Git e GitHub?
    • 5.2 Grandes Projetos Abertos no GitHub
    • 5.3 Recursos do GitHub
    • 5.4 Idioma Suportado no GitHub
    • 5.5 Contas no GitHub
      • 5.5.1 Conta Pessoal
      • 5.5.2 Conta de Organização
      • 5.5.3 Conta Corporativa
      • 5.5.4 Unindo os Pontos
    • 5.6 Planos do GitHub
    • 5.7 Criando uma Conta Pessoal no GitHub
    • 5.8 Explorando a Interface do GitHub
      • 5.8.1 Página Principal (Home)
      • 5.8.2 Página de Notificações (Notifications)
      • 5.8.3 Página de Configurações (Settings)
    • 5.9 Links Úteis: Capítulo 5
    • 5.10 Glossário: Capítulo 5
  • 6. Repositórios no GitHub
    • 6.1 O quê é um Repositório no GitHub?
    • 6.2 Criando um Repositório no GitHub
    • 6.3 Página Principal de um Repositório: Aba Code
      • 6.3.1 Editando um Arquivo em um Repositório no GitHub
      • 6.3.2 Explorando o Histórico de Commits de um Repositório no GitHub
      • 6.3.3 Editando Detalhes de um Repositório no GitHub
      • 6.3.4 Explorando um Repositório Ativo em Uso
    • 6.4 Página de Configurações de um Repositório: Aba Settings
      • 6.4.1 Gerenciando Configurações Gerais de um Repositório no GitHub: Menu General
      • 6.4.2 Gerenciando Configurações de Colaboração de um Repositório no GitHub: Menu Collaborators
      • 6.4.3 Explorando Configurações de um Repositório no GitHub na Prática
    • 6.5 Links Úteis: Capítulo 6
    • 6.6 Glossário: Capítulo 6
  • 7. Documentação de Projetos
    • 7.1 O quê é Documentação de Projeto?
    • 7.2 Explorando a Linguagem de Marcação Markdown
    • 7.3 Criando uma Página de Apresentação no GitHub
    • 7.4 Links Úteis: Capítulo 7
    • 7.5 Glossário: Capítulo 7
  • 8. Issues no GitHub
    • 8.1 O quê é GitHub Issues?
    • 8.2 Criando uma Issue no GitHub
    • 8.3 Explorando a Página de uma Issue no GitHub
    • 8.4 Atribuindo uma Issue no GitHub
    • 8.5 Categorizando Issues de um Repositório através de Labels no GitHub
      • 8.5.1 Gerenciando Labels de um Repositório no GitHub
    • 8.6 Página de Issues de um Repositório no GitHub: Aba Issues
    • 8.7 Explorando Issues no Mundo Real
    • 8.8 Links Úteis: Capítulo 8
    • 8.9 Glossário: Capítulo 8
  • 9. Git Remoto
    • 9.1 Explorando Operações Remotas do Git
    • 9.2 Interagindo com o Repositório Remoto Central no Git
      • 9.2.1 Clonando um Repositório Remoto via `git clone`
      • 9.2.2 Buscar Atualizações de um Repositório Remoto via `git fetch`
      • 9.2.3 Enviando Mudanças Locais para o Repositório Remoto via `git push`
      • 9.2.4 Sincronizando o Repositório Local com o Remoto via `git pull`
      • 9.2.5 Unindo os Pontos
      • 9.2.6 Exemplo
    • 9.3 Interagindo com o Repositório Remoto hello-world
      • 9.3.1 Conectando-se ao GitHub via SSH
      • 9.3.2 Clonando o Repositório hello-world
      • 9.3.3 Alterando hello-world Localmente
        • 9.3.3.1 Editor de Código
        • 9.3.3.2 Editando README.md
        • 9.3.3.3 Salvando Alterações no Controle de Versão Local
      • 9.3.4 Enviando Alterações para o Repositório Remoto
    • 9.4 Links Úteis: Capítulo 9
    • 9.5 Glossário: Capítulo 9
  • 10. Pull Requests no GitHub
    • 10.1 O quê é um Pull Requests no GitHub?
    • 10.2 Entendendo as Propriedades de um Pull Request no GitHub
      • 10.2.1 Branches de Origem e de Destino de um Pull Request
      • 10.2.2 Título de um Pull Request
      • 10.2.3 Descrição de um Pull Request
      • 10.2.4 Modificações de um Pull Request
      • 10.2.5 Pessoas Revisoras de um Pull Request
      • 10.2.6 Labels de um Pull Request
    • 10.3 Criando um Pull Request no GitHub
    • 10.4 Página de um Pull Request no GitHub
      • 10.4.1 Aba Conversation
      • 10.4.2 Aba Commits
      • 10.4.3 Aba Checks
      • 10.4.4 Aba Files Changed
    • 10.5 Página de Pull Requests de um Repositório no GitHub: Aba Pull Requests
    • 10.6 Recebendo Revisões em um Pull Request no GitHub
      • 10.6.1 Boas Práticas
      • 10.6.2 Exemplo Prático
        • 10.6.2.1 Adicionando Conta Colaboradora
        • 10.6.2.2 Solicitando Revisão de Pull Request
        • 10.6.2.3 Lidando com o Feedback
    • 10.7 Mesclando um Pull Request no GitHub
      • 10.7.1 Exemplo Prático
    • 10.8 Atualizando um Repositório Local Após Mesclagem
    • 10.9 Explorando Pull Requests no Mundo Real
    • 10.10 Links Úteis: Capítulo 10
    • 10.11 Glossário: Capítulo 10
  • 11. Fluxo de Trabalho
    • 11.1 Fork no GitHub
      • Fork
    • 11.2 Forks e Pull Requests
      • 11.2.1 Criando um Fork no GitHub
      • 11.2.2 Clonando um Fork
      • 11.2.3 Realizando Alterações Localmente
      • 11.2.4 Enviando Alterações Locais para o Fork Remoto
      • 11.2.5 Criando um Pull Request a partir de um Fork no GitHub
      • 11.2.6 Sincronizando um Fork no GitHub
      • 11.2.7 Revisão, Mesclagem e Atualizações Pós-mesclagem
    • 11.3 Fluxo de Trabalho
  • 11.4 Links Úteis - Capítulo 11
  • 11.5 Glossário - Capítulo 11
  • 12. O Caminho Continua
    • 12.1 Conhecendo Ferramentas Adicionais
      • 12.1.1 Indicação: Jogo Oh My Git
    • 12.2 Explorando Projetos Open Source
    • 12.3 Crescendo e Colaborando em Comunidades
    • 12.4 Desafio: GitCaos 🔥
    • 12.5 Links Úteis - Capítulo 12
    • 12.6 Glossário Completo: Git e GitHub para Humanos
Fornecido por GitBook
Nesta página
  • Problema
  • Solução
  • O Que é um Fork, Afinal?
  • O Significado da Palavra "Fork"
  • Por Que e Quando Usar um Fork?

Isto foi útil?

Editar no GitHub
Exportar como PDF
  1. 11. Fluxo de Trabalho

11.1 Fork no GitHub

O conceito de fork surgiu como solução para um problema específico. Por isso, antes de entender o que ele é, é importante analisar o contexto que levou à sua criação. Compreender a necessidade que motivou os forks nos ajuda a entender seu propósito.

Problema

Imagine que você quer sugerir uma nova funcionalidade para um projeto de código aberto. Com base no que aprendemos até agora, os passos seriam:

  1. Ler a documentação do projeto para entender seus padrões, boas práticas e como contribuir.

  2. Escolher uma issue para trabalhar.

  3. Pedir para ser responsável por essa issue.

  4. Depois que isso for confirmado, clonar o repositório.

  5. Criar um branch específico para a nova funcionalidade.

  6. Alternar para esse branch.

  7. Implementar e salvar as mudanças localmente.

  8. Enviar as mudanças para o repositório remoto (push).

No último passo, um erro apareceria: "...Permissão negada". Isso acontece porque você não possui permissões de escrita no repositório. Mas por que não? Afinal, você só quer contribuir!

Agora, imagine que o projeto seja seu. Se qualquer pessoa pudesse modificar o código diretamente, mesmo que fosse em um branch separado, o caos se instalaria rapidamente.

Primeiro, permitir a criação livre de branches no repositório principal faria com que ele rapidamente se enchesse de branches temporários, experimentais ou abandonados. Isso dificultaria a organização do projeto e tornaria mais complexo encontrar o que realmente importa.

Além disso, mesmo que toda mudança passasse por revisão antes de ser mesclada, ainda haveria riscos. Um branch dentro do repositório principal poderia acabar sendo referenciado por engano, ou até mesmo mesclado por alguém que não percebeu que ele ainda não estava pronto. Quanto mais pessoas com acesso direto, maior a chance de erros humanos acontecerem.

Outro problema seria a segurança. Se alguém com acesso direto sofresse um ataque, por exemplo, uma pessoa mal-intencionada poderia criar ou modificar branches dentro do repositório, expondo o projeto a vulnerabilidades antes que os responsáveis percebessem o problema.

Por fim, gerenciar permissões seria inviável. Com milhares de pessoas querendo contribuir, os responsáveis pelo projeto precisariam decidir, uma a uma, quem pode ou não criar branches no repositório principal. Isso tornaria o fluxo de contribuições lento e burocrático.

Solução

O modelo baseado em Forks e Pull Requests é a solução para isso. Em vez de modificar diretamente o repositório original, você cria uma cópia independente do projeto (fork) dentro da sua conta. Essa cópia permite que você trabalhe nas mudanças livremente, sem precisar de permissões especiais. Quando estiver satisfeito com suas alterações, pode sugeri-las para o repositório original por meio de um Pull Request. Dessa forma, quem mantém o projeto pode revisar o código antes de aceitá-lo, garantindo que as mudanças sejam seguras e organizadas.

Esse fluxo beneficia todos os envolvidos. Quem contribui pode trabalhar sem restrições, enquanto quem mantém o projeto tem controle total sobre o que entra no código-fonte. Com isso, o projeto se mantém estruturado e seguro, ao mesmo tempo que permite uma colaboração ampla e acessível.

O Que é um Fork, Afinal?

Um fork é, basicamente, uma cópia independente de um repositório. Quando você faz um fork de um projeto no GitHub, uma réplica completa do código é criada na sua conta, mantendo o mesmo nome do repositório original.

Imagine, por exemplo, que existe um projeto chamado projeto-incrivel, mantido pela organização cumbucadev. O repositório original está disponível em https://github.com/cumbucadev/projeto-incrivel . Se você fizer um fork desse repositório, ele será copiado para a sua conta e estará acessível em https://github.com/sua-conta/projeto-incrivel.

O nome e o conteúdo do repositório continuam os mesmos, mas agora ele pertence a você. Isso significa que você pode modificar o código da forma que quiser, sem afetar o projeto original.

O Significado da Palavra "Fork"

A palavra fork em inglês pode ser traduzida de duas formas principais para o português:

Bifurcação: Representa um ponto onde algo se divide em dois ou mais caminhos, como uma estrada que se separa em direções diferentes. No contexto de Git e desenvolvimento de software, essa ideia de separação é fundamental para entender os forks.

Garfo: Embora essa seja a tradução mais comum no dia a dia, não é a mais apropriada no contexto técnico. No entanto, muitas pessoas fazem trocadilhos com essa palavra, especialmente em comunidades open source.

Um exemplo famoso de repositório com trocadilho é o Spoon-Knife, do GitHub. O nome brinca com talheres (spoon = colher, knife = faca), enquanto fork (garfo) é um conceito do Git. Esse repositório foi criado para quem quer praticar o uso de forks no GitHub. 🍴

Por Que e Quando Usar um Fork?

Os forks são extremamente úteis no desenvolvimento de software, especialmente em projetos de código aberto. Eles permitem que qualquer pessoa contribua sem precisar de permissões diretas no repositório original. Dessa forma, você pode testar mudanças e sugerir melhorias sem comprometer o código principal.

Além de facilitar contribuições, forks também são usados para explorar e modificar projetos livremente. Como são cópias independentes, você pode testar ideias sem se preocupar com impactos no repositório original. Muitas pessoas utilizam forks para criar suas próprias versões de um projeto, personalizando-o conforme suas necessidades ou dando continuidade ao desenvolvimento de um código desatualizado.

Outro benefício importante é a possibilidade de aprendizado. Se você quer entender melhor como um determinado software funciona, pode criar um fork e estudar o código sem medo de causar problemas. Isso torna os forks uma excelente ferramenta tanto para quem quer contribuir para projetos Open Source quanto para quem deseja estudar códigos já existentes.

Porém, nem sempre um fork é necessário. Se você já tem permissões no repositório original, por exemplo, pode criar um branch diretamente nele, sem precisar de uma cópia separada. O mesmo vale para casos em que você quer apenas testar o código localmente sem modificá-lo ou contribuir de volta — nesse cenário, basta clonar o repositório.

É importante destacar que "fork" não é um conceito do Git, mas sim do GitHub e de outras plataformas de hospedagem de código. O Git, por si só, não possui um comando específico chamado "fork".

Se você estivesse apenas usando o Git sem o GitHub, para conseguir algo semelhante a um fork, precisaria seguir alguns passos manualmente: primeiro, clonar o repositório (gitclone), depois criar um novo repositório em outro lugar, adicionar esse novo repositório como um remoto (gitremote add) e, então, gerenciar suas alterações a partir daí.

O GitHub facilita esse processo tornando o fork um recurso nativo da plataforma. Com apenas um clique, você cria automaticamente uma cópia independente de um repositório dentro da sua própria conta, sem precisar configurar nada manualmente. Isso torna a colaboração em projetos Open Source muito mais simples e acessível para qualquer pessoa.


Na próxima seção, vamos entender como criar um fork no GitHub e como utilizá-lo no nosso fluxo de trabalho.

Anterior10.11 Glossário: Capítulo 10PróximoFork

Atualizado há 5 dias

Isto foi útil?