- Centralized VCS (CVCS): Два пользователя заливают одни и те же файлы в репозиторий. Первый просто заливает, второй делает merge. Его личные изменения нигде не сохраняются.
Distributed VCS (DVCS): все индивидуальные изменения сохраняются в виде отдельных ревизий. - Можно дать полноценные ревизии коллеге (в специальном архиве - bundle), не выкладывая их в центральный репозиторий (самое интересное, что bundle для системы выглядит как обычный read-only репозиторий, его не надо как-то хитро распаковывать). В свою очередь, коллега может, например, сделав Code review, уже сам закинуть эти ревизии в центральный репозиторий.
- Нельзя быстро порушить систему, тупо убив центральный репозиторий.
- Можно парой команд получить список ревизий, которые не приняты сверху в свой клон репозитория и наоборот - которые не отправлены наверх.
- Можно посмотреть граф ревизий (кто для кого является родительской).
- В отличие от TFS есть полноценный откат ревизии с нормальным сохранением истории (что делается именно откат).
- Есть grep, который ищет по всем файлам и всем ревизиям (можно наложить фильтры, чтобы искать не по всем).
- Теги хранятся не в
мифическихметаданных, а обычным файликом (с поддержкой версионности). Причем могут быть локальные (только для своего репозитория) и глобальные. - Нет встроенной утилиты для слияния (кто не любит ручками ставить meld, ediff, winmerge и т.п., будут плакать).
- Нельзя задать имена для веток в графе ревизий репозитория (named branch). Хотя здесь не до конца разобрался, надо читать дальше и пробовать.
- Для команд можно задавать алиасы (чтобы не писать большую портянку).
- Есть готовая команда для поиска багов (и прочей лажи) по ревизиям методом половинного деления.
- Можно автоматом слать патчи и/или бандлы по почте.
- Есть встроенные инструменты для фиксации отдельных изменений (отдельными ревизиями) в большом файле.
- Есть интерфейсы к веб-серверу и Trac'у.
- Для категорических противников командной строки есть GUI-клиент (TortoiseHg) и интеграция с IDE (Eclipse, IntelliJ IDEA, Visual Studio).
- Есть нормальная поддержка патчей на уровне системы (они не будут прятаться в обычных ревизиях, а могут развиваться вместе с репозиторием).
В итоге достаточно легко делать штуки, от которых разработчики, использующие SVN или TFS просто шарахаются:
- заводить отдельную ветку (репозиторий) на фичу;
- дать разработчикам выкладывать код в репозиторий "testing", а из него в "stable" - только тестерам.
3 комментария:
>> В отличие от TFS есть полноценный откат ревизии с нормальным сохранением истории (что делается именно откат).
Так есть это в TFS. Подойди к гуру TFS, они тебе все покажут :)
>> Нет встроенной утилиты для слияния (кто не любит ручками ставить meld, ediff, winmerge и т.п., будут плакать).
Это плохо, мне очень нравится TFSный мерджер.
По поводу отдельных бранчей для фич. Мы сейчас практикуем такое на TFS. Очень удобно.
>> Так есть это в TFS. Подойди к гуру TFS, они тебе все покажут :)
OK.
>> Это плохо, мне очень нравится TFSный мерджер.
Мне тоже нравился. А потом я узнал, что такое winmerge :-)
>> По поводу отдельных бранчей для фич. Мы сейчас практикуем такое на TFS. Очень удобно.
Для нового проекта - верю. Но когда трогаешь много legacy-кода - в TFS сложно сливать.
>> Для нового проекта - верю. Но когда трогаешь много legacy-кода - в TFS сложно сливать.
Большие куски рефакторинга случаются и в новых проектах. И думаю это ничем не отличается от legacy проектов.
Отправить комментарий