Nella mia azienda, tutto il nostro sviluppo (correzioni di bug e nuove funzionalità) viene eseguito su rami separati. Quando è completo, lo inviamo al QA che lo verifica su quel ramo e quando ci danno la luce verde, lo uniamo nel nostro ramo principale. Questo potrebbe richiedere tra un giorno e un anno.
Se proviamo a spremere qualsiasi refactoring su un ramo, non sappiamo per quanto tempo sarà "fuori", quindi può causare molti conflitti quando viene ricongiunto.
Ad esempio, diciamo che voglio rinominare una funzione perché la funzione su cui sto lavorando sta facendo un uso pesante di questa funzione e ho scoperto che il suo nome non si adatta al suo scopo (di nuovo, questo è solo un esempio). Quindi vado in giro e trovo ogni utilizzo di questa funzione, e li rinomino tutti con il suo nuovo nome e tutto funziona perfettamente, quindi lo invio al QA.
Nel frattempo, sta avvenendo un nuovo sviluppo e la mia funzione di ridenominazione non esiste in nessuno dei rami che sono stati biforcati. Quando il mio problema verrà nuovamente unito, si romperanno tutti.
C'è un modo di affrontare questo?
Non è come se la direzione approvasse mai un problema solo per i refactor, quindi deve essere compreso con altri lavori. Non può essere sviluppato direttamente sul main perché tutti i cambiamenti devono passare attraverso il QA e nessuno vuole essere il coglione che ha rotto il main in modo da poter fare un po 'di refactoring non essenziale.