O que as pessoas aqui veem como pontos fortes e fracos do Git, Mercurial e Bazaar?
Na minha opinião, o ponto forte do Git é seu design básico limpo e um conjunto muito rico de recursos. Acho que também tem o melhor suporte para repositórios de vários ramos e gerenciamento de fluxos de trabalho com muitos ramos. É muito rápido e tem um repositório pequeno.
Possui alguns recursos que são úteis, mas requerem algum esforço para serem usados. Isso inclui ara (índice) intermediário visível entre a área de trabalho e o banco de dados do repositório, que permite uma melhor resolução de mesclagem em casos mais complicados, comutação incremental e comutação com árvore suja; detectar renomeações e cópias usando heurística de similaridade em vez de rastreá-los usando algum tipo de id de arquivo, o que funciona bem e permite a culpa (anotar) que pode seguir o movimento do código entre os arquivos e não apenas renomeações no atacado.
Uma de suas desvantagens é que o suporte do MS Windows fica para trás e não está completo. Outra desvantagem percebida é que não é tão bem documentado como, por exemplo, o Mercurial e é menos amigável do que a concorrência, mas muda.
Na minha opinião, a força do Mercurial está em seu bom desempenho e pequeno tamanho do repositório, em seu bom suporte a MS Windows.
A principal desvantagem é, na minha opinião, o fato de que branches locais (vários branches em um único repositório) ainda são cidadãos de segunda classe, e de forma estranha e complicada implementa tags. Além disso, a maneira como ele lida com renomeações de arquivo era subótima (mas isso mudou). O Mercurial não suporta fusões de polvo (com mais de dois pais).
Pelo que ouvi e li as principais vantagens do Bazaar são o suporte fácil para fluxo de trabalho centralizado (o que também é uma desvantagem, com conceitos centralizados visíveis onde não deveria), rastreando renomeações de arquivos e diretórios.
Sua principal desvantagem é o desempenho e o tamanho do repositório para grandes repositórios com longo histórico não linear (o desempenho melhorou pelo menos para repositórios não muito grandes), o fato de que o paradigma padrão é um rancho por repositório (você pode configurá-lo para compartilhar dados, no entanto) , e conceitos centralizados (mas isso também pelo que ouvi mudanças).
Git é escrito em C, scripts de shell e Perl, e pode ser usado em scripts; Mercurial é escrito em C (núcleo, para desempenho) e Python e fornece API para extensões; Bazaar é escrito em Python e fornece API para extensões.
Ao considerar cada um deles entre si e em relação aos sistemas de controle de versão como SVN e Perforce, quais questões devem ser consideradas?
Sistemas de controle de versão como Subversion (SVN), Perforce ou ClearCase são sistemas de controle de versão centralizados . Git, Mercurial, Bazaar (e também Darcs, Monotone e BitKeeper) são sistemas de controle de versão distribuídos . Os sistemas de controle de versão distribuída permitem uma gama muito mais ampla de fluxos de trabalho. Eles permitem usar "publicar quando estiver pronto". Eles têm melhor suporte para ramificação e mesclagem e para fluxos de trabalho com muitas ramificações. Você não precisa confiar em pessoas com acesso de commit para obter contribuições delas de maneira fácil.
Ao planejar uma migração de SVN para um desses sistemas de controle de versão distribuídos, quais fatores você consideraria?
Um dos fatores que você pode querer considerar é o suporte para retração com SVN; Git tem git-svn, Bazaar tem bzr-svn e Mercurial tem extensão hgsubversion.
Isenção de responsabilidade: eu sou um usuário Git e um pequeno contribuidor, e assisto (e participo) da lista de e-mails do git. Eu conheço Mercurial e Bazaar apenas por sua documentação, várias discussões no IRC e listas de e-mail, e postagens de blog e artigos comparando vários sistemas de controle de versão (alguns dos quais estão listados na página GitComparison no Git Wiki).