As fontes do projeto têm várias condicionais que costumavam testar apenas muitos cenários diferentes, mas essa lógica nunca deve passar para o estado de prontidão de produção do código (é um requisito).
Portanto, quando preciso desenvolver um novo "recurso", pego "produção", aplico as alterações de "teste" sobre ele, implemento o "recurso" digitando a nova lógica e, quando os testes passam (alguns automáticos, alguns manuais), removo as alterações de "teste" e então envio o "recurso" para "produção".
Há alguma prática do Git que possa ajudar nisso?
Tudo que eu tentei: worktree
, git merge --no-commit
, patch
.
Não tenho certeza se entendi sua pergunta corretamente. Mas se entendi, você deve conseguir utilizar
git rebase
para isso.Então, se entendi corretamente, você quer rastrear algum código para teste que nunca deve ser incluído no branch que é usado para produção. Ao desenvolver um novo recurso, você precisa que esse código esteja presente, mas ao mesclar o novo recurso ao branch de produção, ele não deve incluir o código de teste (commits with).
Para isso você precisaria de três ramos:
production
segurando o código a ser implantado na produçãotests
consistindo no mesmo código queproduction
+ o código de teste adicionalfeature
consistindo emproduction
+tests
+ novos commits para o novo recursoNo início, esses ramos podem simplesmente ser construídos uns sobre os outros:
Onde os commits T1-T3 introduzem o código de teste do qual você não quer fazer parte
production
. Ao iniciar um novo branch de recurso,feature1
ele é primeiro o mesmo quetests
e então você adiciona os commits F1-F3 para o novo recurso a ele.Quando terminar o desenvolvimento, você poderá rebasear os commits de
frature1
on top detests
back onproduction
, vejagit rebase --onto
:o que resultará em
Agora você pode simplesmente mesclar/avançar rapidamente
production
parafeature1
o que resultará em
Então agora você tem todos os novos commits de recursos
feature1
incluídosproduction
, mas os commits T1-T3 ainda estão em seu próprio branch.Para o próximo recurso, você pode fazer o mesmo com uma nova ramificação
feature2
ramificando detests
novamente. Mas primeiro você precisa incluir os novos commits de recurso nostests
quais você pode fazer comgit rebase
tests
onproduction
ougit merge prodcution
:o que resultará em
ou
o que resultará em