🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Entendendo Fork e Pull Request do GitHub (Introdução ao Desenvolvimento Colaborativo)

Nos artigos anteriores, você dominou o fluxo básico de gerenciamento de seus próprios projetos no GitHub. No entanto, o verdadeiro poder do GitHub se manifesta não apenas quando você o usa sozinho, mas quando participa de projetos de outras pessoas e avança no desenvolvimento colaborativo.

Desta vez, explicaremos detalhadamente o conceito e os procedimentos específicos para "Fork" e "Pull Request", que são os fluxos de trabalho mais importantes e básicos para contribuir com projetos externos nos quais você não tem permissão de escrita (como projetos de código aberto). Ao entender esse fluxo, você poderá dar o primeiro passo para colaborar com desenvolvedores de todo o mundo.


Por que o Fork é necessário? A razão pela qual você não pode fazer push diretamente

Claro, você não pode fazer push (upload) de código diretamente para o repositório GitHub de outra pessoa. Se qualquer um pudesse escrever livremente, o projeto se tornaria uma bagunça, certo? É o mesmo que não poder entrar na casa de outra pessoa sem a chave e redecorá-la como quiser.

Então, como você pode contribuir para o projeto de outra pessoa? A resposta é "Fork".

Fork é uma função que copia todo o repositório de outra pessoa para sua própria conta do GitHub, criando um local de armazenamento exclusivo para você (repositório remoto). É como levar uma "cópia para seu uso" para casa para poder trabalhar livremente. Você tem permissões de escrita completas para esse seu repositório.

E o mecanismo para propor as modificações que você fez em seu próprio repositório para o projeto original com uma mensagem como "Que tal esta mudança?" é o "Pull Request".


Visão Geral do Fork & Pull Request

Antes de digitar os comandos, vamos entender o fluxo geral. O fluxo típico ao contribuir para um projeto de código aberto consiste nas seis etapas a seguir.

  1. Fork: Copiar o projeto original para sua conta do GitHub.
  2. Clone: Copiar o repositório "para seu uso" criado pelo fork para o seu PC.
  3. Branch: Criar um novo branch (ramo) para realizar o trabalho de modificação.
  4. Modify & Commit: Modificar o código em seu PC e fazer o commit das alterações.
  5. Push: Fazer o push do conteúdo comitado para o seu repositório GitHub "para seu uso".
  6. Pull Request: Enviar uma solicitação do seu repositório para o projeto original, pedindo para que "incorporem esta mudança".

Este fluxo pode ser ilustrado da seguinte forma.

[Diagrama mostrando o fluxo: 1. Repositório Original →(Fork)→ 2. Seu Repositório GitHub →(Clone)→ 3. Seu PC →(Push)→ 4. Seu Repositório GitHub →(Pull Request)→ 5. Repositório Original]


Prática! Passos para Contribuir com Projetos de Código Aberto

Agora, vamos seguir os passos específicos. Como prática, vamos prosseguir com o cenário de propor uma correção para um simples erro de digitação (typo).

Passo 1: Fazer o Fork do repositório com o qual você quer contribuir

Primeiro, abra a página do GitHub do projeto com o qual você deseja contribuir. Clique no botão "Fork" exibido no canto superior direito da página.

[Imagem mostrando o botão "Fork" na página do projeto GitHub]

Uma tela "Create a new fork" será exibida. Confirme o nome do repositório, etc., e pressione o botão "Create fork". Após um momento, uma cópia completa do repositório será criada em sua conta do GitHub.

[Imagem da tela do repositório em sua conta após a criação do fork. Pode-se ver que a URL contém seu nome de usuário]

Passo 2: `clone` do repositório do qual você fez o fork

Em seguida, faça o `clone` do repositório "na sua conta" que você acabou de criar com o fork para o seu PC local. Certifique-se de copiar a URL do repositório do qual você fez o fork, não do repositório original.

git clone git@github.com:seu-nome-de-usuario/nome-do-repositorio-forked.git

Passo 3: Criar um branch de trabalho

Navegue até a pasta clonada e crie um novo branch para o trabalho de modificação que você fará. É uma boa prática não sujar o branch `main` original e trabalhar em uma área de trabalho dedicada. Usar `checkout -b` permite criar e mudar para o branch ao mesmo tempo.

cd nome-do-repositorio-forked

git checkout -b fix-typo-in-readme

Passo 4: Modificar o código, fazer `commit` & `push`

Em seu PC local, abra um arquivo como `README.md`, corrija um erro de digitação ou faça alguma outra alteração e salve-o. Quando terminar as alterações, registre-as com `add` e `commit`, como aprendeu até agora.

git add .

git commit -m "Fix a typo in README.md"

Finalmente, faça o push deste commit para o seu repositório remoto (aquele do qual você fez o fork). Não se esqueça de especificar o nome do branch que você criou.

git push origin fix-typo-in-readme

Passo 5: Criar um Pull Request

Finalmente, o clímax. Abra a página do seu repositório do qual você fez o fork no seu navegador novamente. Você deve ver uma notificação amarela dizendo "'fix-typo-in-readme' had recent pushes" e um botão verde "Compare & pull request". Clique neste botão.

[Imagem mostrando o botão "Compare & pull request" exibido no repositório do qual você fez o fork]

Você será levado para uma página "Open a pull request". Aqui, você criará uma carta de solicitação para que suas alterações sejam incorporadas ao projeto original.

[Imagem da tela de criação do Pull Request. Os campos de título e descrição estão destacados]

Verifique o conteúdo e pressione o botão "Create pull request" para enviar sua proposta ao mantenedor do repositório original.

Passo 6: Revisão e Merge (esperando)

Quando um Pull Request é criado, o mantenedor do repositório original é notificado. O mantenedor revisará seu código, poderá deixar comentários ou solicitar modificações adicionais. Após a discussão, se não houver problemas com as alterações, o mantenedor fará o merge (incorporação) do seu Pull Request.

[Imagem mostrando que seu Pull Request foi "Merged", indicado por um ícone roxo]

No momento em que é feito o merge, sua correção se torna oficialmente parte do projeto. Parabéns! Isso é uma contribuição para o código aberto.