O Que É um Fork?
Um fork é a sua própria cópia no servidor do repositório de outra pessoa, onde você pode fazer alterações livremente e propô-las de volta via pull request.
Um fork é como você contribui para um projeto ao qual não tem acesso de escrita. Em vez de criar uma branch dentro do repositório original, você copia o todo para a sua própria conta, trabalha ali e abre um pull request de volta para o original. É a espinha dorsal da colaboração open-source.
Fork versus clone
Um clone copia um repositório para a sua máquina local. Um fork o copia na plataforma de hospedagem para o seu próprio namespace. Você normalmente faz o fork no servidor e depois clona seu fork localmente. O fork dá a você um lugar para fazer push mesmo quando não pode fazer push para o original.
O fluxo fork-and-pull
Você faz o fork do projeto upstream, clona seu fork, adiciona o original como um remote chamado upstream e mantém seu fork sincronizado.
gh repo fork owner/project --clone
git remote add upstream https://github.com/owner/project.git
git fetch upstreamPropondo alterações de volta
Você faz push de uma branch para o seu fork e abre um pull request tendo como alvo o repositório original. Os mantenedores o revisam ali. Como você é dono do fork, pode iterar livremente sem precisar de nenhuma permissão no projeto upstream.
Forks e CI/CD
Pull requests de forks levantam uma questão de segurança: o autor do fork não deve ganhar automaticamente acesso aos secrets do projeto upstream. As plataformas de CI executam PRs de forks com permissões restritas e exigem aprovação do mantenedor antes que workflows que precisam de secrets rodem, protegendo deploy keys e tokens de código não confiável.
Mantendo um fork atualizado
- Adicione o repositório original como um remote upstream.
- Faça fetch e merge das alterações do upstream regularmente para evitar divergência.
- Abra pull requests a partir de uma branch de feature, não da sua branch padrão.
- Espere permissões de CI restritas em pull requests de forks.
Principais conclusões
- Um fork é uma cópia de um repositório no servidor, no seu próprio namespace.
- Ele impulsiona a contribuição open-source através do fluxo fork-and-pull.
- O CI restringe secrets em pull requests de forks para proteger código não confiável.