Nota: Consulte "EDITAR" para obter a resposta da pergunta atual
Antes de tudo, leia Reeducação Subversion de Joel Spolsky. Acho que a maioria das suas perguntas será respondida lá.
Outra recomendação, a palestra de Linus Torvalds no Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Este outro também pode responder à maioria das suas perguntas, e é bastante divertido.
Aliás, algo que eu acho bastante engraçado: até Brian Fitzpatrick e Ben Collins-Sussman, dois dos criadores originais do subversion, disseram em uma conversa no Google "desculpe por isso", referindo-se ao fato de o subversion ser inferior ao mercurial (e aos DVCSs em geral).
Agora, na IMO e em geral, a dinâmica da equipe se desenvolve de maneira mais natural com qualquer DVCS, e um benefício notável é que você pode se comprometer offline porque isso implica o seguinte:
- Você não depende de um servidor e de uma conexão, o que significa tempos mais rápidos.
- Não ser escravo de lugares onde você pode obter acesso à Internet (ou VPN) apenas para poder se comprometer.
- Todo mundo tem um backup de tudo (arquivos, histórico), não apenas do servidor. Ou seja, qualquer pessoa pode se tornar o servidor .
- Você pode confirmar compulsivamente se precisar, sem mexer no código de outras pessoas . As confirmações são locais. Você não pisa nos pés um do outro ao cometer. Você não quebra as construções ou os ambientes de outros apenas comprometendo-se.
- Pessoas sem "acesso de confirmação" podem confirmar (porque confirmar em um DVCS não implica o upload de código), diminuindo a barreira para contribuições, você pode decidir realizar as alterações ou não como integrador.
- Pode reforçar a comunicação natural, já que um DVCS torna isso essencial ... na subversão, o que você tem são corridas de cometer, que forçam a comunicação, mas obstruindo o seu trabalho.
- Os colaboradores podem se unir e gerenciar sua própria fusão, o que significa menos trabalho para os integradores no final.
- Os colaboradores podem ter seus próprios ramos sem afetar os outros (mas, se necessário, compartilhá-los).
Sobre seus pontos:
- A fusão do inferno não existe no DVCSland; não precisa ser tratado. Veja o próximo ponto .
- Nos DVCSs, todos representam um "ramo", o que significa que há mesclagens sempre que alterações são realizadas. Ramos nomeados são outra coisa.
- Você pode continuar usando a integração contínua, se quiser. No entanto, não é necessário IMHO, por que adicionar complexidade ?, apenas mantenha seus testes como parte de sua cultura / política.
- Mercurial é mais rápido em algumas coisas, git é mais rápido em outras coisas. Não depende realmente de DVCSs em geral, mas de suas implementações particulares AFAIK.
- Todo mundo sempre terá o projeto completo, não apenas você. A coisa distribuída tem a ver com o que você pode confirmar / atualizar localmente, compartilhar / retirar de fora do computador é chamado de empurrar / puxar.
- Novamente, leia Reeducação do Subversion. Os DVCSs são mais fáceis e mais naturais, mas são diferentes, não tente pensar que cvs / svn === é a base de todas as versões.
Eu estava contribuindo com alguma documentação para o projeto Joomla para ajudar a pregar uma migração para DVCSs, e aqui fiz alguns diagramas para ilustrar centralizado versus distribuído.
Centralizado
Distribuído na prática geral
Distribuído ao máximo
Você vê no diagrama que ainda existe um "repositório centralizado", e este é um dos argumentos favoritos dos fãs de versão centralizada: "você ainda está sendo centralizado" e não, pois não, pois o repositório "centralizado" é apenas um repositório que você todos concordam (por exemplo, um repo oficial do github), mas isso pode mudar a qualquer momento que você precisar.
Agora, este é o fluxo de trabalho típico para projetos de código aberto (por exemplo, um projeto com colaboração massiva) usando DVCSs:
O Bitbucket.org é um equivalente do github para mercurial, saiba que eles têm repositórios privados ilimitados com espaço ilimitado, se sua equipe for menor que cinco, você poderá usá-lo gratuitamente.
A melhor maneira de convencer-se de usar um DVCS é experimentar um DVCS, todo desenvolvedor experiente de DVCS que usou svn / cvs lhe dirá que vale a pena e que eles não sabem como sobreviveram o tempo todo sem ele.
EDIT : Para responder a sua segunda edição, posso apenas reiterar que, com um DVCS, você tem um fluxo de trabalho diferente, aconselho a não procurar motivos para não experimentá-lo devido às práticas recomendadas , parece que quando as pessoas argumentam que o OOP não é necessário porque eles podem contornar padrões complexos de design com o que sempre fazem com o paradigma XYZ; você pode se beneficiar de qualquer maneira.
Experimente, você verá como trabalhar em "uma filial particular" é realmente uma opção melhor. Uma razão pela qual posso dizer por que o último é verdadeiro é porque você perde o medo de se comprometer , permitindo que você se comprometa a qualquer momento que achar melhor e trabalhe de maneira mais natural.
Em relação à "fusão do inferno", você diz "a menos que estejamos experimentando", eu digo "mesmo se você estiver experimentando + mantendo + trabalhando na v2.0 renovada ao mesmo tempo ". Como eu disse antes, a fusão do inferno não existe, porque:
- Sempre que você confirma, gera uma ramificação sem nome e sempre que suas alterações atendem às alterações de outras pessoas, ocorre uma mesclagem natural.
- Como os DVCSs coletam mais metadados para cada confirmação, ocorrem menos conflitos durante a mesclagem ... então você pode chamá-lo de "mesclagem inteligente".
- Quando você se depara com conflitos de mesclagem, é isso que você pode usar:
Além disso, o tamanho do projeto não importa; quando mudei para o subversion, eu já estava vendo os benefícios enquanto trabalhava sozinho, tudo parecia certo. Os conjuntos de alterações (não exatamente uma revisão, mas um conjunto específico de alterações para arquivos específicos que você inclui uma confirmação, isolados do estado da base de código) permitem visualizar exatamente o que você quis dizer com o que estava fazendo em um grupo específico de arquivos, nem toda a base de código.
Em relação ao modo como os conjuntos de mudanças funcionam e ao aumento de desempenho. Tentarei ilustrá-lo com um exemplo que gostaria de dar: o projeto mootools alterna do svn ilustrado em seu gráfico de rede no github .
Antes
Depois de
O que você está vendo é que os desenvolvedores conseguem se concentrar em seu próprio trabalho enquanto comprometem, sem medo de quebrar o código de outros, eles se preocupam em quebrar o código de outros depois de pressionar / puxar (DVCSs: primeiro confirme, depois empurre / puxe e atualize ), mas como a fusão é mais inteligente aqui, elas geralmente nunca acontecem ... mesmo quando há um conflito de mesclagem (o que é raro), você gasta apenas 5 minutos ou menos para corrigi-lo.
Minha recomendação para você é procurar alguém que saiba como usar o mercurial / git e dizer-lhe para explicar isso a você. Ao passar cerca de meia hora com alguns amigos na linha de comando enquanto utilizava o mercurial com nossas áreas de trabalho e contas de bitbucket, mostrando-lhes como se fundir, até fabricando conflitos para eles para ver como consertar em um período ridículo de tempo, consegui mostrar eles o verdadeiro poder de um DVCS.
Finalmente, eu recomendo que você use mercurial + bitbucket em vez do git + github se você trabalha com o pessoal do Windows. O Mercurial também é um pouco mais simples, mas o git é mais poderoso para o gerenciamento de repositórios mais complexo (por exemplo, git rebase ).
Algumas leituras adicionais recomendadas: