Lo schema di ramificazione a due piani ** prima ** del ramo di sviluppo

0

Ho trovato molti post su come organizzare il lavoro sullo sviluppo del ramo e fino al rilascio del ramo. O anche come lavorare senza il ramo di sviluppo. La tendenza del ramo "sviluppo" che va via , strategia di branching di GitFlow, ma senza il ramo di sviluppo , Per diramare o meno per ramo? ... Ma ho problemi su come organizzare il lavoro prima il ramo di sviluppo.

Se creiamo un nuovo ramo per ogni attività (ticket) e lo inseriamo nel ramo di sviluppo comune, funziona correttamente con i progetti più piccoli.

Ma ho visto progetti più grandi in cui è stato utilizzato lo schema più complicato: per le attività connesse sono stati creati alcuni rami di livello medio e successivamente i rami di ticket non sono stati trasferiti al ramo sviluppatore, ma al ramo di livello medio appropriato. E capisco perché - Se il progetto è così complicato che più di una persona lavora sullo stesso tema e questi sviluppatori iniziano ad avere problemi con le modifiche apportate da altri sul ramo sviluppatori durante il tempo in cui sta aspettando le reazioni e le approvazioni del richiama la richiesta e mentre lavora sulle riparazioni appropriate e deve risolvere i conflitti apparenti ancora e ancora. Pensavo che il ramo di livello medio potesse essere temporaneamente bloccato e quindi tutti i partecipanti potevano spingerlo a turno e ciò avrebbe praticamente impedito i conflitti. Ma ho troppa poca esperienza nell'organizzazione di grandi repository e non ne sono affatto sicuro.

Nella descrizione della strategia GitFlow, link , i disegni hanno questo schema a due piani. Ma questa parte e il suo uso pratico non sono spiegati nemmeno un po '.

La domanda è: lo schema di due livelli di attività costituisce una soluzione necessaria e sufficiente per il problema? E come dovrebbe essere usato per essere quella soluzione?

Modifica: non sto parlando di filiali create da molto tempo per alcuni reparti. Capisco che sono inefficaci. Immagina che entrambi dobbiamo fare alcune funzionalità che toccano le stesse classi diverse. Abbiamo bisogno di risolvere i nostri conflitti di codice sul ramo di sviluppo? E se lo facciamo sul ramo attività comune, allora abbiamo esattamente quello di cui sto parlando: rami locali separati e un ramo tematico comune nel repository.

    
posta Gangnus 10.01.2018 - 11:22
fonte

2 risposte

2

Con il controllo della versione distribuita, il modello di ramificazione è solo l'interfaccia pubblica globale al repository centrale. Il codice che consente di in i rami di funzionalità non rientra nello scopo del modello e soddisfa completamente le esigenze individuali in qualsiasi momento. Può coinvolgere un singolo ramo o molti.

Un modello relativamente comune per me è la creazione di un ramo di funzionalità per me stesso, quindi un programmatore di coppia si libera così gli do il permesso di fare push diretto a quel ramo, quindi le altre persone hanno bisogno dei miei cambiamenti in corso per i loro contributi alla funzione , quindi forzano il mio ramo e inviano richieste di pull al mio ramo. Potrebbero a loro volta avere sviluppatori che inviano richieste di pull nella loro filiale, ma dal mio punto di vista non mi interessa. Quando la funzione è completa, unisco master nel mio ramo, quindi invio una richiesta pull più grande, schiacciata o rebasata se lo desideri.

Un altro modello relativamente comune è che creerò un ramo di funzionalità e un altro sviluppatore creerà autonomamente il proprio ramo di funzionalità correlate. Sono rami autonomi, quindi potrebbero essere uniti in master indipendentemente, ma vogliamo assicurarci che le nostre modifiche funzionino insieme, quindi uniamo localmente le filiali degli altri, eseguiamo alcuni test locali, quindi estrai le unioni prima di inviare richieste di pull a master .

Non hai bisogno di formalizzare la comunicazione a quel livello, o fare sempre la stessa cosa, basta adattarti come le esigenze del momento dettano.

    
risposta data 10.01.2018 - 17:34
fonte
2

Se ricevi molti conflitti, devi unire più spesso, non di meno.

L'idea di gitflow - a quanto ho capito - non è quella di proteggere gli sviluppatori sul ramo di funzione dalle modifiche a develop , ma di mantenere le feature non finite da develop in modo che develop contenga solo funzioni che sono pronto per il rilascio.

Per le funzioni che richiedono più tempo, dovresti unire develop nel tuo branch di funzionalità regolarmente. Se disponi di molte di queste funzioni attive, potrebbe essere necessario unirle trasversalmente. Questo di solito non dovrebbe causare problemi, perché la fusione funziona abbastanza bene in git.

Ora suppongo che potresti aggiungere un ulteriore livello per mantenere le sotto-funzioni non finite fuori dal ramo della funzione. Basta notare che questo potrebbe aumentare notevolmente la quantità di cross-merging che è necessario. Forse è meglio trovare un modo per evitare rami di caratteristiche molto longevi.

Come hai notato tu stesso, molti progetti non utilizzano affatto i rami di funzionalità (= > integrazione / distribuzione continua).

    
risposta data 10.01.2018 - 12:14
fonte

Leggi altre domande sui tag