Sto cercando un consiglio che rispecchi il mio punto di vista. Per prima cosa, spiegherò il mio punto di vista.
Il mio punto di vista
Lavoro in una grande azienda come sviluppatore C ++, stiamo usando GIT. Parlerò di come i nostri sviluppatori dovrebbero organizzare i commit del GIT. L'idea principale è che la maggior parte dei commit dovrebbe essere refactoring puro senza cambiamenti funzionali.
Il flusso di lavoro dell'implementazione di una funzione A
dovrebbe avere il seguente aspetto:
- Scopri se
A
si adatta all'architettura corrente - In caso contrario, refactor dell'architettura corrente in modo che la funzione
A
ora si adatti a essa - Implementa
A
senza intoppi, con il minimo possibile di modifiche aggiuntive
Il flusso di lavoro di correzione di un bug B
dovrebbe apparire come segue:
- Scopri la causa principale di
B
e se è ovvio e facile da correggere - In caso contrario, refactor codice corrente in modo che
B
sia ovvio e facile da risolvere - Correggere
B
senza intoppi, con il minimo possibile di modifiche aggiuntive
In entrambi i casi ci sono meno modifiche funzionali al codice possibile. Presumo che le modifiche al refactoring siano migliori dei cambiamenti di funzione poiché sono meno inclini ai bug (alcuni possono essere automatizzati), più facili da testare (nulla dovrebbe cambiare) e quindi sono più facili da recensire (richiede meno attenzione da un revisore). / p>
La situazione ideale è quando esegui vari commit di refactoring con probabilmente molte linee di codice modificate, e poi un commit su una riga che in realtà corregge il bug. Poiché le correzioni dei bug richiedono un'attenzione elevata da parte dei revisori, più brevi sono, meglio è.
Per rafforzare questa idea ti consiglio di categorizzare categoricamente ogni commit in uno dei seguenti tipi, contrassegnando esplicitamente ogni messaggio di commit con un piccolo simbolo:
- (~) Contrassegna i refactoring puri
- (-) Correzione bug di segni
- (+) Contrassegna la nuova funzione implementata
- (*) Segna le modifiche alle funzionalità esistenti, che non sono dovute a correzioni di bug
- (=) Contrassegna alcune piccole modifiche (commenti, formattazione, rinomina file e variabili, ecc.)
La raccomandazione è di favorire (=) e (~), e assicurarsi che (-) e (*) siano il più piccolo possibile. Per quanto riguarda (+), beh ... a volte abbiamo solo bisogno di scrivere del codice:)
La domanda
Mi piacerebbe sentire l'opinione di altri esperti su questo approccio: è sensato? Ci sono insidie? Qualcuno ha esperienza con un modello simile? Finora ho trovato questo argomento correlato: Impegno spesso, perfeziona dopo, pubblica una volta: best practice Git , ma non del tutto pertinente. Non ricordo tali raccomandazioni nel codice completo di Macconel, e IIRC non raccomanda come organizzare le modifiche al codice.
Si noti che l'argomento non è specifico di GIT, ma poiché GIT ha strumenti eccellenti per la gestione della cronologia locale e la creazione di commit, l'argomento è strettamente legato a GIT.