Quando si utilizza Git, è consigliabile utilizzare il ramo master per lo sviluppo attivo?


32

In primo luogo, alcuni retroscena, stiamo trasferendo tutti i nostri team di progetto all'utilizzo di git e stiamo definendo le linee guida su come organizzare i repository in modo che determinati rami possano anche essere monitorati per l'integrazione continua e distribuzione automatica sui server di test. Attualmente ci sono due modelli che stanno sviluppando:

  1. Fortemente influenzato dall'articolo di nvie.com sulla ramificazione di successo con il ramo principale che rappresenta il codice più stabile, un ramo di sviluppo per il codice bleeding edge e un ramo di integrazione per il codice pronto per i test di controllo qualità.

  2. Un modello alternativo in cui il ramo master rappresenta il codice di sviluppo del bordo di spurgo, un ramo di integrazione per il codice pronto per i test di controllo qualità e un ramo di produzione per il codice stabile pronto per la distribuzione.

A questo punto, è in parte una questione di semantica rispetto a ciò che rappresenta il ramo principale, ma lo sviluppo attivo sul ramo principale è in realtà una buona pratica o non è poi così rilevante?


1
Mi piace il worfklow che Scott Chacon usa per sviluppare GitHub: scottchacon.com/2011/08/31/github-flow.html
user16764

1
Come descritto, mi sembra che sia un problema semantico più che altro: qualsiasi organizzazione evolverà i propri processi e per alcuni aspetti i nomi devono riflettere il flusso di lavoro. Generalmente la chiave sembra essere che da qualche parte si definisca qualcosa del genere che "il codice sorgente di HEAD riflette sempre uno stato pronto per la produzione". Quello che scegli di chiamare è meno importante, ma sia git-flow che il flusso di lavoro GitHub si concentrano su quella separazione e sul controllo quando spingi verso il "coso" pronto per la produzione
Murph,

@Murph - Vero, ma dal momento che stiamo facendo un po 'di tutto questo da zero, ho pensato che sarebbe meglio seguire più o meno le convenzioni comuni in modo che i nuovi sviluppatori che vengono assunti non abbiano una ripida curva di apprendimento a causa di insolite pratiche interne.
rjzii,

Quindi hai risposto alla tua domanda (-: A dire il vero anche ponendo la domanda sei molto più avanti della curva ...
Murph

Risposte:


33

L'unica vera caratteristica di definizione del masterramo è che è l'impostazione predefinita per alcune operazioni. Inoltre, i nomi delle filiali hanno significato solo all'interno di un repository specifico. La mia masterpotrebbe puntare al vostro development, per esempio. Inoltre, masternon è nemmeno necessario un ramo, quindi se c'è qualche confusione su quale ramo dovrebbe essere, il mio consiglio è di solito di lasciarlo fuori del tutto.

Tuttavia, a mio avviso, il modo migliore per pensarci è il default per spingerci. La maggior parte dei tutorial online letti dagli sviluppatori lo supporranno. Quindi, ha molto senso masteressere qualunque ramo venga spinto più spesso. Alcune persone lo considerano come la copia incontaminata che è intoccabile per gli sviluppatori, tranne dopo il più rigoroso controllo, ma l'utilizzo in questo modo rimuove molte delle utili impostazioni predefinite fornite da Git. Se vuoi quel tipo di ramo incontaminato, lo metterei in un repository completamente separato sul quale solo alcune persone possono scrivere.


7
+1. E poiché il codice "pronto per la produzione" è il codice importante, dovrebbe anche vivere in un ramo con un nome che evidenzi questa importanza. "master" come nome di ramo predefinito sicuramente non soddisfa tale richiesta, poiché viene utilizzato anche in qualsiasi altro repository per qualsiasi intenzione.
Bananeweizen,

4
+1. Questa è la risposta nella vita reale. Per sottolineare il punto: nessuno nella tua squadra ha definito il ramo "master", come ha fatto il sistema git. Per qualsiasi cosa importante, attenersi ai rami che qualcuno ha definito nella tua squadra.
Travis Wilson,

1
Pienamente d'accordo. Mentre mi piace molto il modello di flusso git ( nvie.com/posts/a-successful-git-branching-model ), l'unica cosa che mi disturba è che il master è strettamente riservato alle versioni, il che è controintuitivo.
Bachi,

12

No, non è consigliabile, anche all'inizio prima di andare al QA. Come best practice, il modello di sviluppo dovrebbe essere coerente dall'inizio alla fine. Il tuo ramo principale dovrebbe iniziare vuoto, dovresti diramare il ramo di sviluppo e iniziare ad aggiungere file, unirti al ramo di integrazione, quindi successivamente al tuo maestro.

Mentre a nessuno può interessare durante lo sviluppo che il ramo principale non si costruisca, si presta presto a cattive abitudini. Il master dovrebbe sempre compilare, e per le principali release delle funzionalità non sarebbe una cattiva idea avere rami archiviati delle build più grandi in modo che i punti di rilascio stabili possano essere restituiti se necessario.


3
Non è meglio eseguire il monitoraggio della versione tramite tag?
Adonis K. Kakoulidis,

1
@AdonisK .: Non riesco a vedere la pertinenza della tua domanda.
Joel Etherton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.