Eu tenho o seguinte problema:
- a versão
master
funciona bem - a versão da última tag antes
master
(digamoslast
) de ter um bug - um colega precisa de um patch para sua
last
revisão para aquele bug específico
OK. Vamos pedir ao nosso amigo git bisect
a revisão que corrigiu o bug:
git bisect start
git bisect bad last
git bisect good master
Mas isso não vai funcionar:
Algumas rotações boas não são ancestrais das rotações ruins.
git bisect não pode funcionar corretamente neste caso.
Talvez você confunda rotações boas e ruins?
Alguma dica para superar isso? Eu perdi algo nos documentos?
git bisect run ...
para automatizar a divisão em dois. Portanto, não tenho chance de apenas trocar as palavrasgood
ebad
(isso era muito óbvio). Como usarrun
para encontrar a primeira boa revisão?git bisect run
retorna bom ou ruim como código de saída, não como uma string. Veja minha resposta que acabei de postar abaixo.Respostas:
No git 2.7, você pode usar os argumentos --term-old e --term-new.
Por exemplo, você pode identificar um commit de correção de problemas assim:
Ao testar, diga
git bisect fixed
ougit bisect unfixed
conforme apropriado.Resposta antiga, para versões do git anteriores a 2.7
Em vez de treinar temporariamente para pensar que ruim significa bom e bom significa ruim, por que não criar alguns apelidos?
Em
~/.gitconfig
adicionar o seguinte:Você pode começar a identificar um commit de correção de problemas assim:
Ao testar, diga
git bisect-fixed
ougit bisect-unfixed
conforme apropriado.fonte
is the first bad commit
, então parece que o treinamento temporário ainda é necessário, não?bisect-after = bisect bad
ebisect-before = bisect good
, por sua recomendação. Agora posso usar qualquer um dos conjuntos de aliases. Veremos o que acabo favorecendo mais depois de alguns usos.Eu apenas "trapacearia" git e trocaria significados de bom <=> mau.
Em outras palavras, considere "ruim" como algo que não apresenta o problema, então esta não é a versão "boa" para basear seu patch.
Bom e ruim são conceitos bastante subjetivos de qualquer maneira, certo? :)
fonte
Se você estiver usando
git bisect run
como tenho feito com oprove
comando Perl (que executa testes automáticos), você não tem chance apenas de trocargood
ebad
. O sucesso dos testes será relatado como código de saída.Encontrei uma sintaxe Bash válida para negar o código de saída do programa executado por
git bisect run
:Isso me deu a primeira revisão para passar nos testes executados
prove
.fonte
Git agora permite que você os use
old
enew
sem primeiro defini-los. Você tem que chamargit bisect start
sem commits como argumentos adicionais, então iniciar corretamente a bissecção chamandohttps://git-scm.com/docs/git-bisect#_alternate_terms
Isso é essencialmente o que @MarcH estava sugerindo que deveria ser implementado.
fonte
git bisect start --term-new fixed --term-old broken
Aliases Git são uma boa idéia, no entanto os termos
fixed
eunfixed
tenho o mesmo problema quegood
ebad
: você não pode tê-los ser compatível com ambas as regressões e progressões. É fácil encontrar palavras que funcionam de qualquer maneira: simplesmente escolha-as da terminologia de pesquisa binária original, que é neutra por natureza, sem preconceito do que é bom ou ruim. Por exemplo:Com termos neutros como esses, você sempre pode digitar:
git bisect-high
(ougit bisect-upper
, ougit-bisect max
, ... sua escolha!) Se você está procurando uma regressão ou uma correção .Uma pena que os desenvolvedores do git bisect não puderam simplesmente reutilizar qualquer um dos termos existentes. A preocupação da interface do usuário não é do git de um modo geral: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
fonte