Сегодня посмотрел внимательно Darcs - лёгкую распределённую систему контроля версий. Её часто приводят в пример как рабочее приложение, писаное на Haskell.
Darcs понравился (лось? лась?).
Darcs прост.
каждая рабочая копия проекта — полноценный репозиторий (в этом и распределённость). Соотвественно, не нужно настраивать сервер (как при юзе SVN или CVS). Я не «ниасилил», просто лично мне проще всего лишь набрать darcs initialize в рабочей папке с сорцами и получить полноценный репозиторий без лишних телодвижений. Распределённость всякой VCS хороша и тем, что в случае отрыва от Сети можно спокойно продолжать работу на локальной машине, а потом слиять правки на локальном репозитории и основным в Сети (если юзается сетевой репозиторий). Форкать древо легко, слиять древа тоже. Понятия branch в darcs, соответственно, нет за ненадобностью — каждый репозиторий это по своему ветка. В мануале сказано, что все репозитарии теоретически являются ветками друг друга :) и вообще ветвь — лишь удобная метафора для ума, а не технический термин в мире darcs.
автор очень сильно нажимает на то, что Darcs (а точнее, механизмы внесения правок в древо и, особенно, разрешения конфликтов в правках) имеет под собой некоторую чисто теоретическую основу — Theory of patches («теорию патчей»). Почитать интересно, хотя автор физик и теория в некоторых местах «hand waving» даже по его словам =] Вносимые в дерево изменения можно объединять в один патч; поддерживается откат изменений. И вообще, всякое дерево в представлении Darcs есть композиция патчей.
можно принимать изменения в репозиторий в интерактивном режиме, подтверждая каждую отдельную правку.
достаточно много возможностей для соединения удалённых репозиториев и перемещения патчей между ними: FTP, HTTP, SSH; можно по мылу отправлять патчи (с поддержкой проверки по GPG) и настроить клиент на принятие полученных патчей (так делает автор Darcs). В комплекте идёт простая CGI-программка для обзора darcs-репозиториев; ещё есть сторонне средство для просмотра на Python — darcsweb.
Ну и много других стандартных фич систем контроля версий, и diff можно делать, и гонять тесты при отправке патчей в дерево (и отвергать эти патчи в случае неуспешного выполнения тестов), слиять несколько патчей в один; Darcs прост, но достаточно функционален, эта система изящна. Подчёркивается, что Darcs — система контроля изменений, а не версий, отсутствует версионирование для каждого файла в отдельности (как в CVS); запрашивать версии репозитория можно по дате, хэшу changeset'а или метке, которую можно назначить при отправке изменений в репозиторий.
Как и Subversion и CVS, основным средством управления Darcs-репозиториями является основная CLI-утилита darcs, так что реальна интеграция со стандартными средствами разработки. Для emacs есть различные режимы для работы с darcs (слабенькие), для vim тоже есть плагин.
В общем, мне что-то очень Darcs понравился (лась, лось). Время для знакомства и полного освоения системы минимальное — это один из главных плюсов системы.