Implementar o fluxo de trabalho de fork

Concluído

Uma bifurcação é uma cópia de um repositório. A criação de um fork de um repositório permite-lhe realizar alterações livremente sem afetar o projeto original.

Mais comumente, os forks são usados para propor alterações no projeto de outra pessoa ou usar o projeto de outra pessoa como ponto de partida para a sua ideia.

Um fork é uma cópia completa de um repositório, incluindo todos os ficheiros, commits e (opcionalmente) ramificações.

As bifurcações são uma ótima maneira de dar suporte a um fluxo de trabalho de origem interna: você pode criar uma bifurcação para sugerir alterações quando não tiver permissão para escrever diretamente no projeto original. Quando estiver pronto para partilhar essas alterações, é fácil contribuir de volta usando pull requests.

O que há em um garfo?

Uma bifurcação começa com todo o conteúdo do repositório upstream (original). Você pode incluir todas as ramificações ou limitá-las apenas à ramificação padrão ao criar uma bifurcação.

Observações importantes:

  • Nenhuma das permissões, políticas ou pipelines de construção são copiadas.
  • A nova bifurcação age como se alguém clonasse o repositório original e, em seguida, o enviasse para um novo repositório vazio.
  • Depois que uma bifurcação é criada, novos arquivos, pastas e ramificações não são compartilhados entre os repositórios, a menos que uma solicitação pull os carregue.

Partilha de código entre ramificações

Você pode criar pull requests em qualquer direção: de um fork para um upstream ou de um upstream para um fork. A abordagem mais comum é da bifurcação para a montante.

As permissões, políticas, compilações e itens de trabalho do repositório de destino serão aplicados à solicitação pull.

Escolher entre ramos e garfos

  • Small Teams (2-5 desenvolvedores): Recomendamos trabalhar em um único repositório. Todos devem trabalhar em uma ramificação de tópico, e a ramificação principal deve ser protegida com políticas de ramificação.

  • Equipes maiores: À medida que sua equipe cresce, você pode se ver superando esse arranjo e preferir mudar para um fluxo de trabalho de bifurcação.

  • Quando usar garfos:

    • Seu repositório tem muitos contribuidores casuais ou pouco frequentes (como um projeto de código aberto).
    • Apenas colaboradores principais têm direitos de 'commit' direto no seu repositório.
    • Você quer que colaboradores de fora da equipe principal trabalhem a partir de uma bifurcação.
    • Você deseja isolar as alterações até ter a chance de revisar o trabalho.

O fluxo de trabalho de bifurcação

Aqui estão os passos básicos para o fluxo de trabalho de ramificação:

  1. Criar um fork.
  2. Clone localmente.
  3. Faça suas alterações localmente e envie-as para uma filial.
  4. Crie e conclua uma solicitação pull para upstream.
  5. Sincronize a sua bifurcação com a mais recente a partir do upstream.

Passo 1: Criar a bifurcação

  1. Navegue até o repositório que deseja bifurcar e escolha "Fork".
  2. Especifique um nome e escolha o projeto onde deseja que a bifurcação seja criada.
  3. Se o repositório contiver muitas ramificações de tópico, recomendamos que você bifurque apenas a ramificação padrão.
  4. Escolha as reticências e, em seguida, o "Fork" para criar o fork.

Diagrama que mostra a criação da bifurcação.

Observação

Para criar um fork, deve ter a permissão de Criar Repositório no seu projeto escolhido. Recomendamos que você crie um projeto dedicado para forks onde todos os colaboradores tenham a permissão Criar repositório.

Passo 2: Clone o seu fork localmente

Quando a bifurcação estiver pronta, clone-a usando a linha de comando ou um IDE como o Visual Studio. O garfo será o seu controle remoto de origem.

git clone {your_fork_url}
For convenience, after cloning, you'll want to add the upstream repository (where you forked from) as a remote named upstream:

```bash
git remote add upstream {upstream_url}

Etapa 3: Fazer e enviar alterações via push

É possível trabalhar diretamente na branch principal - afinal, este fork é a sua cópia do repositório. No entanto, recomendamos que você ainda trabalhe em uma ramificação temática porque:

  • Ele permite que você mantenha vários fluxos de trabalho independentes ao mesmo tempo.
  • Reduz a confusão posteriormente quando desejas sincronizar as alterações no teu fork.

Faça e confirme as alterações como faria normalmente. Quando terminar as alterações, empurre-as para a origem (a sua bifurcação).

Etapa 4: Criar e concluir uma solicitação pull

Abra uma solicitação de pull request da sua ramificação para o repositório upstream. Todas as políticas, revisores necessários e compilações serão aplicadas no repositório upstream. Quando todas as políticas forem satisfeitas, a solicitação pull poderá ser concluída e as alterações se tornarão uma parte permanente do repositório upstream.

Diagrama que mostra Criar e concluir um PR.

Importante

Qualquer pessoa com permissão de Ler pode abrir uma solicitação pull para upstream. Se uma pipeline de compilação de pedido de pull estiver configurada, a compilação será executada contra o código introduzido na ramificação.

Passo 5: Sincronize o seu fork com a versão mais recente

Quando sua solicitação pull for aceita no upstream, convém certificar-se de que sua bifurcação reflita o estado mais recente do repositório.

Recomendamos rebasear-se no ramo principal do upstream (assumindo que o principal é o ramo de desenvolvimento principal):

git fetch upstream main
git rebase upstream/main
git push origin

Benefícios do fluxo de trabalho de fork

O fluxo de trabalho de bifurcação permite isolar as alterações do repositório principal até que você esteja pronto para integrá-las. Quando você estiver pronto, integrar o código é tão fácil quanto concluir uma solicitação pull.

Esta abordagem prevê:

  • Segurança: As alterações são isoladas até revisão.
  • Colaboração: várias pessoas podem trabalhar em diferentes recursos simultaneamente.
  • Qualidade: Todas as alterações passam pelo mesmo processo de revisão.
  • Flexibilidade: os colaboradores não precisam de acesso de gravação ao repositório principal.