Le filiali dovrebbero funzionare correttamente, in base alla mia esperienza con le recensioni preimpegnate durante il lavoro precedente.
Nota allora, stavamo usando le recensioni pre-commit solo per le patch critiche al codice candidato alla versione di produzione, quindi non c'erano molti rami (le modifiche di routine venivano passate attraverso le recensioni post-commit).
Dal momento che sembrerai utilizzare le recensioni pre-commit per tutte le modifiche, potrebbe essere necessario gestire una grande quantità di filiali. Se ti aspetti che lo sviluppatore effettui una modifica "recensibile" a settimana in media, finirai per avere circa 50 filiali ogni anno per ogni sviluppatore del team. Se stai usando piccoli pezzi di lavoro - come quelli che richiedono 1, 2, 3 ... giorni - moltiplica 50 per 2, 3, 5 ... di conseguenza.
Di seguito sono riportate alcune altre considerazioni da prendere in considerazione se lo si desidera nel modo migliore .
1. gestire i casi in cui la revisione ritardata blocca il codice necessario per gli altri membri del team
Stabilire, monitorare e risolvere i conflitti relativi alle scadenze di revisione del codice. Per quanto mi riguarda delle revisioni preimpegnate alle modifiche di routine che ho affrontato in uno dei progetti precedenti, la scadenza ragionevole è di circa 3 giorni e il tempo per iniziare a preoccuparsi è quando la revisione non viene completata più di 1 giorno dopo l'invio.
Per fare un confronto, nelle revisioni post-commit questi requisiti sono molto più rilassati (sto usando una scadenza di 2 settimane e comincio a preoccuparmi dopo 1 settimana) - ma poiché hai come target le recensioni pre-commit, questo probabilmente non è interessante.
2. unire i conflitti quando si invia il codice esaminato
Cosa fare se il commit per il codice esaminato è bloccato da modifiche in conflitto commesse da qualcun altro mentre il codice era in attesa di revisione?
Un paio di opzioni da considerare sono
- tornare all'inizio e richiedere agli sviluppatori di reimplementare e riesaminare la modifica.
In tal caso, potrebbe essere necessario affrontare un impatto negativo sul morale della squadra che ciò potrebbe (sarà!).
- passare la responsabilità di unire ad altri membri del team ("unisci master").
In tal caso, dovrai anche decidere se le fusioni di per sé devono essere sottoposte alla revisione pre-commit o meno - e se sì, quindi cosa fare nel caso in cui quella fusione a sua volta incontra un altro conflitto.
- ignorare le modifiche apportate al codice rivisto nella fase di unione
In tal caso, potrebbe essere necessario affrontare un impatto negativo sul morale della squadra in relazione al fatto che il codice impegnato differisce da quello rivisto.
- inventare un modo per evitare conflitti L'
approccio diretto è quello di consentire a un solo sviluppatore alla volta di modificare un determinato set di file, anche se questo non ti proteggerà dal tipo di cambiamenti che non modificano direttamente i file, ma li influenzano attraverso le modifiche interne all'API . Potresti anche scoprire che questo tipo di "blocco pessimistico" rende problematiche le modifiche a livello di sistema e il refactoring profondo.
Per fare un confronto, non ci sarebbero problemi di questo tipo nelle revisioni post-commit (dal momento che riguardano il codice che è già unito per definizione) - ma poiché si prendono di mira le recensioni pre-commit, questo probabilmente non è interessante.
3. caricare lo sviluppatore che è in attesa di revisione
Stabilire una politica esplicita per stabilire se lo sviluppatore che ha inviato la recensione debba passare a una nuova attività o fare qualcos'altro (come ad esempio inseguendo il revisore).
Per fare un confronto, le revisioni post-commit non necessitano quasi di una politica esplicita (poiché è naturale procedere con l'attività successiva dopo aver impegnato il codice e tenendo conto che la scadenza delle revisioni è di una settimana o due) - ma poiché si scelgono le recensioni pre-commit, questo è probabilmente non interessante.