Введение

Программное обеспечение для контроля версий

Monotone — это инструмент с открытым исходным кодом для распределенного контроля версий. Он отслеживает изменения в файлах, группирует наборы изменений в коммиты и сохраняет историю при переименованиях. Основное внимание в проекте уделяется целостности, а не производительности. Monotone разработан для распределенной работы и активно использует криптографические примитивы для отслеживания ревизий файлов (с помощью безопасной хеш-функции SHA-1) и аутентификации действий пользователей (с помощью криптографических подписей RSA).

Важные события

Версия Monotone 0.26 внесла существенные изменения во внутренние структуры базы данных, включая новую структуру, известную разработчикам Monotone как roster. Базы данных Monotone, созданные с использованием версии 0.26, не могут обмениваться ревизиями со старыми базами данных Monotone. Старые базы данных должны быть сначала обновлены до нового формата. Новый протокол netsync несовместим с предыдущими версиями Monotone.

Дизайн

Как и GNU arch, и в отличие от Subversion, Monotone использует распределённый подход к контролю версий. Monotone использует хеши SHA-1 для идентификации отдельных файлов или групп файлов, как это делают Git и Mercurial, вместо линейных номеров ревизий. Каждый участник ведёт собственную историю изменений, хранящуюся в локальной базе данных SQLite.

Совершенство

До некоторой масштабной оптимизации в версии 0.27, приоритет Monotone, отдаваемый корректности в ущерб оптимизации, часто критиковался за негативный первоначальный опыт использования. Первым действием нового пользователя часто является синхронизация (клонирование) большой существующей базы данных Monotone, операция, которая для больших баз данных могла занимать несколько часов из-за обширной валидации и проверки целостности, выполняемой Monotone при передаче ревизий по сети. После заполнения первоначальной (клонированной) базы данных последующие операции обычно выполняются быстрее. По состоянию на 2010 год, возможности для дальнейшей оптимизации некоторых редко используемых функций все еще существуют.

Рабочий процесс

Monotone особенно хорошо поддерживает рабочий процесс ветвления и слияния, что достигается, в частности, за счет возможности фиксации изменений перед слиянием.

Сетевые связи

Хотя Monotone изначально поддерживал различные сетевые протоколы для синхронизации деревьев, теперь он использует исключительно собственный протокол под названием netsync, который более надёжен и эффективен и имеет некоторые концептуальные сходства с rsync и cvsup. (Однако, начиная с версии 0.27, протокол netsync можно использовать через любой поток, в том числе и через SSH-соединения.) Netsync имеет собственный порт, зарегистрированный в IANA (4691), и старые версии протокола поддерживаются плагином Wireshark для анализа трафика. Отдельный сервер Monotone не требуется, поскольку любой клиент Monotone может функционировать как сервер.

Реализация

Монотон реализован на современном диалекте C++ с использованием библиотек Boost, Botan (для криптографии) и SQLite (для работы с базами данных). Monotone поддерживает настройку и расширение посредством функций-перехватчиков, написанных на языке программирования Lua. Процесс сборки Monotone автоматизирован с помощью BuildBot и включает в себя обширное регрессионное тестирование.