What makes software release cycle shorter with DVCS, compared to CVCS?
Sono d'accordo con Bart sul fatto che il motivo principale è il modello di branching usato, ma il tipo di sistema di controllo della versione influenza direttamente quali modelli di branching sono validi. Quindi abbiamo due sotto-domande. Quale modello di ramificazione supporta meglio i sistemi distribuiti e perché rende il ciclo di rilascio più veloce?
La differenza fondamentale tra controllo di versione centralizzato e distribuito è che, senza l'autorità centrale, non è possibile applicare la linea temporale lineare. Quindi, per rendere possibile il controllo della versione distribuita, questi sistemi dovevano necessariamente definire la cronologia come grafico aciclico diretto, dove ogni revisione ha semplicemente un identificatore univoco, una o più revisioni dei genitori e può avere arbitrarie revisioni di molti bambini di cui non si è nemmeno a conoscenza, perché non sei ancora sincronizzato con il sistema in cui sono stati creati.
Si scopre che questo approccio si presta molto bene alla ramificazione. Non devi fare nulla per ottenere un ramo, semplicemente ne hai sempre uno. In questo modo puoi tuffarti direttamente al lavoro per prima cosa e lasciare decidere dove e quando fonderlo o anche dove tenerlo e sotto quale nome fino a quando non sai se sta effettivamente andando come ti serve.
Al contrario, tutti i sistemi centralizzati conservano la storia come insieme di rami con una sequenza lineare di revisioni. Quindi devi decidere in anticipo se hai bisogno di un ramo, dargli un nome e averlo creato esplicitamente. Questo è un bel rompicapo quando non sai ancora cosa vale l'idea e spesso non lo sai prima di iniziare a programmare. Complicato dal fatto che nella maggior parte dei sistemi centralizzati i nomi delle filiali sono globali, significativi, spesso persistenti e non facilmente modificabili, mentre in tutti i principali sistemi distribuiti sono solo moniker locali che possono essere modificati per capriccio e riciclati liberamente. E dal fatto che tutte le operazioni di ramificazione e unione sono di solito un po 'più lente in CVCS.
Quindi DVCS rende le filiali più facili e quindi i team che utilizzano le filiali DVCS per tutto il tempo mentre i team che utilizzano CVCS le eviteranno la maggior parte del tempo.
Ora perché utilizzare le filiali consente rilasci più frequenti? Bene, ogni squadra sottostimerà un compito di tanto in tanto, spesso quando appare difficile trovare un bug. I team che utilizzano sistemi centralizzati di solito eseguono tutto il debug e la maggior parte dello sviluppo, sul trunk, perché i rami sono scomodi. Quindi non possono rilasciare fino a quando non eliminano la maggior parte dei bug e devono interlacciare fasi di sviluppo e debugging.
Al contrario nei sistemi distribuiti in cui tutto il lavoro viene svolto sui rami questi possono essere uniti per test, testati, bug corretti e solo il lavoro che passa i test uniti separatamente al trunk. Risultante nel trunk che ha pochissimi bug e quindi può essere rilasciato più spesso, di solito ogni volta che una caratteristica importante atterra.
Aiuta anche che ogni volta che c'è un cambiamento nelle priorità, i lavori in corso possono essere banalmente accantonati con l'approccio di ramificazione usato con i sistemi distribuiti. Nella maggior parte dei progetti reali, i cambiamenti nelle priorità avvengono continuamente.