La nostra azienda sta attualmente utilizzando un semplice modello di diramazione trunk / release / hotfix e vorrebbe ricevere consigli su quali modelli di diramazione funzionano meglio per la propria azienda o processo di sviluppo.
Flussi di lavoro / modelli di ramificazione
Di seguito sono riportate le tre descrizioni principali di questo che ho visto, ma si contraddicono in parte le une con le altre o non vanno abbastanza lontano per risolvere i problemi successivi che abbiamo riscontrato (come descritto di seguito). Pertanto, per impostazione predefinita, il nostro team non ha soluzioni così eccezionali. Stai facendo qualcosa di meglio?
Fusione vs rebasing (storia intricata vs sequenziale)
Dovresti uno
pull --rebase
o aspettare con l'unione di nuovo alla linea principale fino al completamento dell'attività? Personalmente mi propongo di fondermi poiché ciò conserva un'illustrazione visiva della base su cui è stata avviata e terminata un'attività, e preferisco anchemerge --no-ff
a questo scopo. Ha tuttavia altri inconvenienti. Inoltre, molti non hanno realizzato l'utile proprietà della fusione, che non è commutativa (la fusione di un ramo di argomento in master non significa unire il maestro nel ramo di argomento).Sto cercando un flusso di lavoro naturale
A volte si verificano errori perché le nostre procedure non acquisiscono una situazione specifica con regole semplici. Ad esempio, una correzione necessaria per le versioni precedenti dovrebbe ovviamente basarsi sufficientemente a valle per essere possibile unire a monte in tutti i rami necessari (l'uso di questi termini è abbastanza chiaro?). Tuttavia accade che una correzione lo faccia diventare il master prima che lo sviluppatore si renda conto che avrebbe dovuto essere collocato più a valle, e se ciò è già stato spinto (anche peggio, unito o qualcosa basato su di esso), l'opzione rimanente è cherry-picking, con i pericoli associati. Quali semplici regole come queste usi?Anche in questo è inclusa l'imbarazzo di un ramo di argomento escludendo necessariamente altri rami di argomento (supponendo che siano ramificati da una linea di base comune). Gli sviluppatori non vogliono finire una funzione per avviarne un'altra sentendosi come se il codice che avevano appena scritto non fosse più lì
Come evitare la creazione di conflitti di unione (a causa di cherry-pick)?
Quello che sembra un modo sicuro per creare un conflitto di unione è quello di scegliere tra i rami, che non possono mai essere uniti di nuovo? Applicare lo stesso commit nel ripristino (come fare?) In entrambi i rami potrebbe risolvere questa situazione? Questo è uno dei motivi per cui non oso spingermi per un flusso di lavoro basato in gran parte sulla fusione.
Come scomporre in rami topici?
Ci rendiamo conto che sarebbe fantastico assemblare un'integrazione finita dai rami degli argomenti, ma spesso il lavoro dei nostri sviluppatori non è chiaramente definito (a volte semplice come "frugare") e se un po 'di codice è già entrato in un argomento "misc", non può essere tolto di nuovo da lì, secondo la domanda sopra? Come lavori per definire / approvare / laurearti / rilasciare i tuoi argomenti?
Naturalmente, le procedure adeguate come la revisione del codice e la laurea sarebbero adorabili.
Ma semplicemente non possiamo mantenere le cose abbastanza districate per gestire questo - qualche suggerimento? rami di integrazione, illustrazioni?
Di seguito è riportato un elenco di domande correlate:
- Quali sono alcune buone strategie per consentire l'aggiornamento rapido delle applicazioni distribuite?
- Descrizione del flusso di lavoro per l'utilizzo di Git per lo sviluppo interno
- Git workflow per lo sviluppo del kernel Linux aziendale
- Come si mantengono il codice di sviluppo e il codice di produzione? (grazie per questo PDF!)
- gestione dei rilasci git
- Git Cherry-pick vs Merge Workflow
- Come selezionare più commit
- Come unire file selettivi con git-merge?
- Come scegliere una serie di commit e unire in un altro ramo
- ReinH Git Workflow
- flusso di lavoro git per apportare modifiche che non riporterai mai all'origine
- Scegli una fusione
- Flusso di lavoro Git corretto per sistema operativo combinato e codice privato?
- Mantenimento del progetto con Git
- Perché cant Git non può unire le modifiche al file con un genitore / master modificato.
- Git ramificare / riformulare buone pratiche
- Quando "git pull --rebase" mi metterà nei guai?
- Come vengono utilizzati i DVCS in team di grandi dimensioni?
Scopri anche cosa scrive Plastic SCM sullo sviluppo guidato dalle attività e, se Plastic non è la tua scelta, studia il modello di ramificazione di nvie e i suoi script di supporto .