Como manter um repositório git bifurcado com ramos de recursos que o upstream não puxa?

8

Então, aqui está um fluxo de trabalho típico no Github ...

  1. Como algum projeto ->bifurca-se -> git clone https://github.com/you/someproject.

  2. Projeto aberto. Gosta do que vê, mas faça algumas alterações.

  3. Tendo cuidado de trabalhar apenas em feature-branch( git checkout -b some-feature), você decide fazer uma solicitação de recebimento com o upstreammantenedor - depois de empurrá-lo feature-branchpara o garfo do Github.

  4. O mantenedor, por qualquer motivo, recusa a atração.

Por exemplo ... aqui está uma solicitação pull que enviei que corresponde ao cenário acima. ..

Agora normalmente , se o mantenedor tinha fundido a atração ... o fluxo de trabalho seria simples ... Na minha máquina local, eu iria cometer quaisquer alterações locais sobre o que feature-brancheu estava no momento ... git fetch --all, git checkout master, git pull upstream --ff-only. Em seguida, reproduza minhas alterações em cima disso, conforme desejado ...

MAS...

E se eu decidir que você deseja continuar trabalhando com as alterações no meu fork, independentemente de tudo ... e ainda assim desejar acompanhar + mesclar as alterações que acontecerem upstream? Normalmente, eu excluiria a ramificação de recursos e seguiria em frente. Como você pode manter uma masterramificação capaz de ser mesclada a montante, mantendo os recursos do garfo enquanto está "permanentemente desconectada" dos upstream' HEAD?

alex grey
fonte
11
Alterações gratuitas na formatação não serão aceitas em nenhum projeto que eu já tenha ouvido falar e, se você insistir em mantê-las em seu repositório, seja bem-vindo ao seu merecido e merecido inferno pessoal. Se você acabou de limpar os avisos, provavelmente ele será aceito, embora ainda seja solicitado que você o envie dividido em pedaços de tamanho razoável. Até alterações para tornar a formatação autoconsistente podem ser aceitas. Mas mudanças que mudam a formatação para uma diferente nunca são. Porque todo mundo está acostumado com a formatação atual e porque causará problemas com a mesclagem.
Jan Hudec
Apenas para o contexto, as estatísticas diff da solicitação de
2
@ Jan Hudec Minha pergunta é sobre como usar as ferramentas ... NÃO se você gosta do meu pedido pull , lol. Pessoalmente, não posso lidar com uma licença ENORME (em um projeto OSS) na parte superior de cada arquivo F-ing, portanto, o grande número de exclusões .. e as outras alterações eram convencionais e não fizeram nada além de remover avisos do compilador e fazer o código realmente legível. Independentemente disso, essa pergunta é sobre como alguém pode "trabalhar de forma diferente", sem saber o que é "certo" e "errado".
Alex Gray
1
@alexgray: É por isso que não estou escrevendo como resposta, mas como comentário.
Jan Hudec

Respostas:

6

Independentemente do uso do seu cenário, eis como você pode fazê-lo:

  • mestre é exatamente da versão que o mestre upstream possui
  • customizado é sua própria ramificação "principal" na qual você aplicou as alterações de formatação
  • todas as ramificações de recursos são ramificadas personalizadas se você não quiser que elas sejam puxadas para o mestre upstream
  • Depois que o mestre é atualizado, você refaz o costume para o mestre e refaz suas ramificações do recurso para o personalizado

Com esta estratégia, deve funcionar. Mas lembre-se de que todas as alterações feitas em uma ramificação de recursos com base no costume não serão aceitas no mestre upstream.

Jim Martens
fonte