Git ha un comando per fare esattamente quello che vuoi, git bisect
Trova per ricerca binaria il cambiamento che ha introdotto un bug
Nel tuo caso si desidera utilizzare come git bisect run /path/to/script
, che testerà automaticamente i commit ed eseguirà un controllo con ogni commit per trovare il commit errato.
Si noti che lo script (my_script nell'esempio precedente) deve uscire con il codice 0 se il codice sorgente corrente è buono e uscire con un codice compreso tra 1 e 127 (incluso), tranne 125, se l'origine corrente il codice è cattivo
Qualsiasi altro codice di uscita interromperà il processo di bisect. Va notato che un programma che termina con "exit (-1)" lascia $? = 255, (vedere la pagina di manuale dell'uscita (3)), poiché il valore viene tagliato con "& 0377".
Il codice di uscita speciale 125 deve essere utilizzato quando non è possibile testare il codice sorgente corrente. Se lo script termina con questo codice, la revisione corrente verrà saltata (vedi git bisect saltare sopra). 125 è stato scelto come il valore più alto da usare per questo scopo, perché 126 e 127 sono usati dalle shell POSIX per segnalare lo stato di errore specifico (127 è per comando non trovato, 126 è per comando trovato ma non eseguibile --- questi dettagli fanno non importa, in quanto sono errori normali nello script, per quanto riguarda "bisect run").
Quindi, lo script dovrebbe compilare le sorgenti, eseguire la suite di test dell'unità e quindi fornire il codice di uscita corrispondente. La sezione di esempio da bisect manpage copre questo bene (comprese le build rotte, l'unione di hotfix, ecc.)
Grazie per il chiarimento. Ma un test può essere sia un test unitario che un test di regressione. Le due categorie si intersecano, giusto? – Randomblue
@Randomblue: Sì, a volte, quando un test soddisfa entrambi gli scopi poiché un bug è stato causato da un test dell'unità mancante. Tuttavia, si dovrebbe fare attenzione con l'intersezione. I test di regressione sono spesso affari prolissi (a causa di dati e tempistiche reali) e tendono ad arrivare in enormi mandrie. Comprimono i test unitari, quindi tienili il più lontano possibile. Inoltre, è probabile che i test unitari vengano abbandonati nel refactoring, quindi sono test di regressione negativi. – thiton
Vedo, grazie ancora! – Randomblue