Gestione del sistema di controllo delle versioni distribuito e difficile con la programmazione delle coppie

3

Un problema comune nel mio flusso di lavoro molto piccolo è la gestione delle unioni dai repository trunk / stable fino alle feature branch che sono in anticipo rispetto alle versioni trunk o stable, ma che devono tenere traccia delle modifiche nel trunk e nelle versioni stable. Stiamo usando mercurial, ma qualsiasi DVCS potrebbe avere un flusso di lavoro simile, incluso Git o altri.

Inizialmente avevamo un flusso di lavoro in cui uno sviluppatore senior (io) ha fatto la maggior parte della fusione, in quanto era il modello che avevo sperimentato in un posto di lavoro precedente, ma simile al luogo precedente in cui abbiamo lavorato così, questo ha messo molto di onere su uno sviluppatore di prendere i risultati di un gran numero di commit, e ripulire il pasticcio risultante.

Se stavi unendo una modifica, con un messaggio di commit, forse potresti farlo in modo pulito, ma quello che spesso mi succede è che mi ritrovo un po 'indietro e una settimana di cambiamenti deve essere unita.

Quello che mi chiedo è, quando entri in una situazione in cui è necessaria una grande fusione, usando Mercurial o DVCS, qual è il processo che usi e coinvolge la collaborazione tra più sviluppatori nel team, e il tuo team usa la programmazione di coppie per risolvere questo complesso problema di programmazione di Come Ordinare e Atterrare le Modifiche da TRUNK che devono raggiungere il ramo FEATUREXYZ.

Ilflussodilavoroolapraticastandardchestoimmaginandoassomigliaaquesto:

  • quandoun'unionefinoaunramodifunzionalitàsembrasempliceeriguardasololemiestessemodifiche,lofacciodasolo

  • quandoun'unionefinoaunramodifunzionalitàattiraanchelemodifichediqualcunaltrochenonsonobanali,coinvolgoquellapersonanell'unione.

Buonsenso?Credodisi.Masospettochealtriabbianoseguitoquestastradaepossanooffrireunapprocciopiùchiaramenteelaboratoe"provato e vero" per questa situazione generale.

    
posta Warren P 05.06.2013 - 17:01
fonte

2 risposte

4

Non esiste un modo semplice per aggirarlo. Una verità fondamentale sul controllo della versione è che più divergenti, più difficile è l'unione. (Dovrei metterlo su una maglietta).

Non c'è motivo per cui ogni membro del team debba essere coinvolto nell'unione ogni volta, ma è possibile ruotarlo. Se non puoi farlo un giorno, assicurati che lo faccia qualcun altro. Più la tua squadra è coinvolta, più saranno a conoscenza di incompatibilità tra i rami e meno probabilità di apportare modifiche di rottura.

Dovresti anche cercare opportunità per unire in il trunk. È necessario suddividere le funzionalità lunghe in passaggi intermedi che possono essere testati e integrati in modo sicuro, anche se l'intera funzione non è ancora disponibile. Le nuove funzionalità di solito richiedono sia la rielaborazione del vecchio codice che la creazione di un codice nuovo di zecca. È il primo che crea il maggior numero di conflitti di fusione. Fortunatamente, è anche il più semplice da modificare prima che una funzionalità sia completata.

Ad esempio, supponiamo che la nuova funzione richieda che un determinato campo di una struttura dati esistente ampiamente utilizzata sia di 16 bit anziché di 8. In genere è possibile apportare una modifica del genere nel trunk senza influire negativamente sul codice esistente. Prima lo fai, prima il resto della compagnia smetterà di fare quel particolare conflitto di unione nel loro nuovo codice.

In altre parole, se stai combattendo continuamente gli stessi tipi di conflitti di unione, dovresti cercare dei modi per risolverlo nel bagagliaio, se possibile.

    
risposta data 05.06.2013 - 17:52
fonte
0

In qualche modo sembra andare all'indietro.

Il ramo della funzione è di proprietà di una o più persone. Sanno di cosa si tratta. Gestiranno il suo stato con qualsiasi mezzo conveniente.

Il ramo sarà integrato in qualche momento, gli sviluppatori possono lasciarlo allo stato finale o scegliere di ridurre la divergenza. In ogni caso semanticamente sembra che loro aggiungano le loro modifiche a qualunque punto sul trunk.

Idealmente il rebase (o fusione) ha successo, il ramo si compila, i test funzionano, tutti contenti. Se non è il caso, di nuovo la gente del ramo andrà a scoprire cosa è successo sul main, o semplicemente guardando la cronologia o afferrando gli sviluppatori di trunk per informazioni. (La buona caratteristica di DVCS è che l'azione può essere posticipata senza ostacolare il lavoro ...)

Utilizzare PP o recensioni per avere un impatto sull'unione? se il delta non è banale, certo, perché no. Ma se il framework di test è in atto, si suppone che accetti problemi in tempo prima dell'integrazione finale.

    
risposta data 05.06.2013 - 17:30
fonte

Leggi altre domande sui tag