In un mondo ideale, i conflitti non si verificano mai. Ci sono alcuni scenari in cui i conflitti di fusione sono più comuni ... Quindi il mio consiglio per te sarebbe evitare questi scenari. Ed eccoli qui.
Preoccupazioni strettamente accoppiate
Supponiamo che tu abbia un tecnico front-end e un tecnico back-end. E tu incontri dei conflitti. Questo di solito è dovuto al fatto che il tuo codice non è strutturato in modo tale che le due parti possano evolversi senza interrompersi a vicenda, come ad esempio il mix di accesso al database con il template. Si aggira questo introducendo solo abbastanza astrazione per aggiungere la distanza tra le due preoccupazioni.
Modifiche API e sviluppo simultaneo delle funzionalità
Diciamo che sto aggiungendo una piccola funzionalità al mio prodotto, ed è ortogonale alle interiora. Sarà un punto di rilascio. Nel frattempo, l'architetto capofila sta rifacendo il coraggio del prodotto per portarlo da 1.0 a 2.0. Mi aspetto da 1.0 a 1.1 per l'uscita della mia funzione.
Qui, l'architetto toccherà molta superficie. E se non hai un altro livello di astrazione tra la tua funzione e l'API raw, ti imbatterai in un conflitto molto disordinato.
A volte nelle grandi organizzazioni questo non può essere aiutato.
Refactoring eccessivamente aggressivo
Questo è in realtà lo stesso delle modifiche API. Anche se non ci sono cambiamenti funzionali, ci sono molte modifiche testuali e, dal punto di vista di Git, è lo stesso.
Remedies
- Mantenere le modifiche fisicamente piccole. Piccole differenze, piccole quantità di righe modificate
- Rilasciare per padroneggiare frequentemente
- Integrazione frequente del master
- Comunicare le modifiche dirompenti (come le modifiche API / i grandi refactoring)
- Separare le preoccupazioni aziendali tra i limiti "fisici" (moduli / file / repos)