Qual è la differenza tra i rami master e develop in Git?
Non c'è essenzialmente nessuna differenza tranne che per i nomi dei rami. Git non pone restrizioni sui nomi dei rami e come tale puoi chiamare i tuoi rami come vuoi. Per convenzione gli sviluppatori useranno un ramo "master" per essere la copia base del codice, è in questo ramo che tutto il codice scritto in rami diversi sarà alla fine unito, e rappresenterà l'attuale versione rilasciata dell'applicazione in sviluppo. "Develop", come suggerisce il nome, è normalmente usato come una sorta di ambiente di staging, o ambiente di test, in cui tutti i nuovi rami feature/hot fix saranno fusi per stabilire gli effetti del nuovo codice, buoni o cattivi, prima che gli sia permesso di essere uniti al ramo "master".
I nomi sono semplicemente la convenzione accettata perché hanno senso nel contesto in cui sono usati e sono stati adottati dalla comunità in generale.
L'esatta implementazione della strategia di controllo della versione che voi e il vostro team scegliete di utilizzare dipende dal tipo di applicazione che state creando e dal processo più efficiente con cui il team deve lavorare, poiché più persone lavorano sugli stessi file/classi ecc.
Git fornisce tutti gli strumenti per permettere a grandi team di collaborare in modo efficace ed efficiente su progetti di quasi tutte le dimensioni.
Una strategia che era usata da un'azienda per cui lavoravo e che ho trovato particolarmente buona funzionava in questo modo:
Origin - Repository remoti memorizzati su un'istanza di GitLab ospitata internamente
Master - La versione corrente dell'applicazione, etichettata con un numero di release come v1, v2 ecc. Questo si riferisce al numero di versione principale. Le modifiche al codice che erano firmate sul ramo di sviluppo sarebbero state rilasciate periodicamente come rilasci di versioni minori, rendendo il tag qualcosa come v2.3, v3.1 ecc. I rilasci delle versioni maggiori avvenivano molto meno spesso e generalmente erano programmati con molto tempo di anticipo, in contrasto con un preavviso di 2 o 3 settimane di una data di rilascio di una versione minore al team.
Develop - Ambiente di sosta per testare il codice che sarà rilasciato con il prossimo push al ramo master. Questi rilasci aggiungerebbero un numero di versione minore al tag del ramo master, a meno che non ci fossero cambiamenti significativi o di rottura da unire. Le date di rilascio erano programmate e quindi se il tuo ramo non veniva unito e testato in sviluppo entro una data limite doveva aspettare il prossimo rilascio.
Feature Branches - La maggior parte del lavoro veniva svolto in singoli rami feature che, come suggerisce il nome, introducevano una nuova caratteristica o processo all'applicazione. Veniva sempre creato dal ramo master, in modo che tutti partissero dall'attuale stato di rilascio dell'applicazione. Queste caratteristiche erano poi accodate sotto un tag di data di rilascio, e veniva creata una data limite per le fusioni in sviluppo. L'intero ramo di sviluppo sarebbe stato poi unito al master alla data di rilascio.
Rami hot-fix - Di nuovo, come suggerisce il nome, un ramo hot-fix era usato per correggere un bug all'interno dell'applicazione. Questi erano l'eccezione alla strategia della data di rilascio. Un ramo veniva creato da master, il bug corretto, e poi unito a develop. Il ramo sarebbe stato poi unito direttamente al master piuttosto che dal ramo di sviluppo, in quanto ciò avrebbe comportato il cherry picking per assicurare che solo la correzione del bug fosse unita.
La strategia di cui sopra è abbastanza comune, e nella mia esperienza funziona molto bene, finché tutti i membri del team capiscono e si attengono alle regole e alle convenzioni richieste dalla strategia.
Spero che questo vi aiuti a capire la rilevanza dei nomi dei rami in git.