В чем здесь люди видят относительные сильные и слабые стороны Git, Mercurial и Bazaar?
На мой взгляд Git сильная - это чистый базовый дизайн и очень богатый набор функций. Я считаю, что он также имеет лучшую поддержку для репозиториев с несколькими ветвями и управления рабочими процессами с большим количеством ветвей. Это очень быстро и имеет небольшой размер репозитория.
В нем есть некоторые полезные функции, но для их использования нужно приложить определенные усилия. К ним относятся видимая промежуточная промежуточная ара (индекс) между рабочей областью и базой данных репозитория, которая позволяет улучшить разрешение слияния в более сложных случаях, инкрементное завершение и завершение с грязным деревом; обнаружение переименований и копий с использованием эвристики подобия, а не их отслеживание с помощью каких-то идентификаторов файлов, что хорошо работает и позволяет указывать вину (аннотировать), что может отслеживать перемещение кода по файлам, а не только полное переименование.
Одним из его недостатков является отставание и неполная поддержка MS Windows. Другой предполагаемый недостаток заключается в том, что он не так хорошо документирован, как, например, Mercurial, и менее удобен для пользователя, чем конкуренты, но он меняется.
На мой взгляд, сильная сторона Mercurial заключается в его хорошей производительности и небольшом размере репозитория, а также в хорошей поддержке MS Windows.
Основным недостатком, на мой взгляд, является тот факт, что локальные ветки (несколько веток в одном репозитории) по-прежнему являются второсортными и странным и сложным образом реализуют теги. Также способ переименования файлов был неоптимальным (но этот перенос изменился). Mercurial не поддерживает слияние осьминогов (с более чем двумя родителями).
Из того, что я слышал и читал, основные преимущества Bazaar заключаются в простой поддержке централизованного рабочего процесса (что также является недостатком, поскольку централизованные концепции видны там, где этого не должно быть), отслеживание переименований как файлов, так и каталогов.
Его основным недостатком является производительность и размер репозитория для больших репозиториев с длинной нелинейной историей (производительность улучшилась, по крайней мере, для не слишком больших репозиториев), тот факт, что парадигма по умолчанию - одно ранчо на репозиторий (хотя вы можете настроить его для обмена данными) , и централизованные концепции (но и то, что я слышал об изменениях).
Git написан на C, сценариях оболочки и Perl и поддерживает сценарии; Mercurial написан на C (ядро, для производительности) и Python и предоставляет API для расширений; Bazaar написан на Python и предоставляет API для расширений.
Какие проблемы следует учитывать при рассмотрении каждого из них друг с другом и с системами контроля версий, такими как SVN и Perforce?
Системы контроля версий, такие как Subversion (SVN), Perforce или ClearCase, представляют собой централизованные системы контроля версий. Git, Mercurial, Bazaar (а также Darcs, Monotone и BitKeeper) - это распределенные системы контроля версий. Распределенные системы контроля версий позволяют использовать гораздо более широкий диапазон рабочих процессов. Они позволяют использовать «опубликовать, когда будете готовы». Они лучше поддерживают ветвление и слияние, а также рабочие процессы с большим количеством ветвей. Вам не нужно доверять людям с доступом к коммитам, чтобы иметь возможность легко получать от них вклад.
Какие факторы вы бы приняли во внимание при планировании перехода с SVN на одну из этих распределенных систем контроля версий?
Один из факторов, который вы, возможно, захотите принять во внимание, - это поддержка взаимодействия с SVN; У Git есть git-svn, у Bazaar есть bzr-svn, а у Mercurial есть расширение hgsubversion.
Отказ от ответственности: я пользователь Git и небольшой участник, и я смотрю (и участвую) в списке рассылки git. Я знаю Mercurial и Bazaar только из их документации, различных обсуждений IRC и списков рассылки, а также сообщений в блогах и статей, сравнивающих различные системы контроля версий (некоторые из которых перечислены на странице GitComparison в Git Wiki).