O que torna o ciclo de lançamento de software mais curto com o DVCS, em comparação com o CVCS?
Concordo com Bart que o principal motivo é o modelo de ramificação usado, mas o tipo de sistema de controle de versão afeta diretamente quais modelos de ramificação são viáveis. Portanto, temos duas sub-perguntas. Qual modelo de ramificação os sistemas distribuídos suportam melhor e por que torna o ciclo de lançamento mais rápido?
A diferença fundamental entre o controle de versão centralizado e distribuído é que, sem a autoridade central, você não pode impor uma linha do tempo linear. Portanto, para tornar possível o controle de versão distribuído, esses sistemas precisavam necessariamente definir o histórico como gráfico acíclico direcionado, em que cada revisão simplesmente possui identificador exclusivo, uma ou mais revisões pai e pode ter muitas revisões filho arbitrárias das quais você talvez nem saiba, porque você não sincronizou com o sistema em que eles foram criados ainda.
Acontece que essa abordagem se presta muito bem à ramificação. Você não precisa fazer nada para obter um ramo, você simplesmente sempre tem um. Assim, você pode ir direto ao trabalho e sair decidindo quando e onde mesclá-lo ou até onde mantê-lo e com o nome até saber se está realmente indo do jeito que você precisa.
Por outro lado, todos os sistemas centralizados mantêm o histórico como um conjunto de ramificações com sequência linear de revisões. Portanto, você deve decidir com antecedência se precisará de um ramo, nomeie-o e crie-o explicitamente. Isso é um grande problema quando você ainda não sabe o que vale a ideia e muitas vezes simplesmente não sabe disso antes de começar a programar. Complicado pelo fato de que na maioria dos sistemas centralizados os nomes das filiais são globais, significativos, geralmente persistentes e não são facilmente alterados, enquanto em todos os principais sistemas distribuídos são apenas identificadores locais que podem ser alterados por capricho e reciclados livremente. E pelo fato de que todas as operações de ramificação e fusão são geralmente um pouco mais lentas no CVCS.
Assim, o DVCS facilita as filiais e, portanto, as equipes que usam filiais DVCS o tempo todo, enquanto as equipes que usam o CVCS as evitam na maioria das vezes.
Agora, por que o uso de ramificações permite lançamentos mais frequentes? Bem, toda equipe subestima uma tarefa de vez em quando, geralmente quando um bug difícil de rastrear aparece. As equipes que usam sistemas centralizados geralmente fazem toda a depuração e o maior desenvolvimento no tronco, porque as ramificações são inconvenientes. Portanto, eles não podem liberar até liberarem a maioria dos bugs e precisam intercalar as fases de desenvolvimento e depuração.
Ao contrário dos sistemas distribuídos, onde todo o trabalho é feito nas filiais, eles podem ser mesclados para teste, teste, correção de bugs e apenas o trabalho que passa nos testes é mesclado separadamente ao tronco. Resultando em tronco com muito poucos bugs e, portanto, pode ser liberado com mais frequência, geralmente sempre que um recurso importante chega.
Também ajuda que, sempre que houver uma mudança de prioridades, o trabalho em andamento possa ser arquivado de maneira trivial com a abordagem de ramificação usada em sistemas distribuídos. Na maioria dos projetos reais, as mudanças nas prioridades acontecem o tempo todo.