Здравствуй, мой любознательный %username%!
Несколько месяцев назад я случайно наткнулся на еще одну перспективную систему управления версий — Veracity, о которой и хотел бы сегодня рассказать, чтобы тебе было что поковырять на выходных. Несмотря на то, что разработка Veracity идет уже больше года, на Хабре ее имя было лишь пару раз вскользь упомянуто в комментариях. Под катом тебя ждет краткое описание Veracity и ссылки, где можно получить более подробную информацию о ней.
Итак, Veracity (англ. «правдивость», «достоверность», «точность») — это распределенная система контроля версий, схожая с Git, разрабатываемая по лицензии Apache 2.0 в фирме SourceGear.
Основные отличия от Git
- Наличие локальных номеров ревизий. Veracity, как и Git, использует криптографические хэш-функции для версионного контроля отдельных файлов. Однако в локальном репозитории каждый коммит получает уникальный номер ревизии, как это происходит в Subversion. Номер ревизии и хэш могут использоваться наравне друг с другом и часто указываются через двоеточие.
- Поддержка нескольких хэш-функций. Всем известно, что Git в своей работе использует функцию SHA-1. Veracity позволяет выбрать между SHA-1, SHA-2 или Skein.
- Формальное переименование файлов. Git при переименовании файлов реально удаляет файл, а затем создает файл с таким же содержимым и новым именем. Veracity делает именно переименование существующего файла.
- Поддержка блокировок файлов. Централизованные системы контроля версий наподобие Subversion поддерживают 2 схемы работы: блокировка файлов (svn lock svn unlock) и слияние изменений (svn merge). Хотя Git и другие распределенные системы контроля версий часто используют в работе центральный репозиторий, в них отсутствует механизм блокировки файлов. Veracity исправляет этот недостаток. Понятно, что для блокировки файлов, необходим доступ к удаленным репозиториям через сеть.
- Поддержка штампов. Veracity включает в себя абсолютно новую функциональность, называемую штампами. Штамп (stamp) — это отметка из произвольного текста, которую разработчик может прикрепить к любому коммиту. В отличие от тегов (tag), сопоставляющих каждому коммиту уникальное имя, один и тот же штамп может помечать произвольное число коммитов. Например, при использовании системы непрерывной интеграции можно ставить штамп «Tests passed» на коммиты, прошедшие серию тестов без ошибок, ровно также как производители техники ставят штампик «qc pass» (quality controll passed) на каждый произведенный образец.
- Децентрализованная база данных репозитория. Многие системы контроля версий хранят данные о репозитории внутри рабочего каталога. Например, Git имеет папку .git, в которой хранятся бинарные объекты, деревья, объекты коммитов, индекс, конфигурация, хуки и т.д. Veracity хранит большинство служебной информации о репозитории вне рабочего каталога в специальной базе данных. Это, например, позволяет иметь сразу несколько рабочих каталогов для одного репозитория.
- Встроенный интерпретатор Javascript. Veracity использует Javascript в качестве основного скриптового языка. Например, можно писать хуки в виде функций Javascript. Также имеется встроенный API для Javascript, который можно использовать для написания серверной части веб-приложений, использующих Veracity. Вполне логично, что для хранения сериализованных данных используется JSON.
- Встроенное веб-приложение для обзора репозитория. Одной командой можно запустить встроенный веб-сервер с приложением, позволяющим просматривать содержимое репозитория, историю изменений, статус сборки проекта или баг-трекер.
Установка
Процедура установки самая обыкновенная и имеет 2 возможных альтернативы:
- Собрать из исходных кодов. Система написана на языке C, как и некоторые другие системы контроля версий (например, Git, Subversion или Fossil), поэтому нам придется иметь дело с установкой исходных кодов зависимостей и утилитами наподобие cmake и make. Для тех, кто любит подобные вещи вот инструкции по сборке для Linux и для Windows.
- Установить из бинарного пакета. Чтобы быстрее начать ковырять Veracity, гораздо проще будет воспользоваться бинарными пакетами, которые можно скачать на странице загрузок. Имеются бинарные пакеты для Debian-совместимых систем (*.deb: x86, x64) и для Windows (*.msi: x86, x64).
Основные команды
Для работы с Veracity используется короткая команда vv. Ниже приведен список основных операций Veracity и примеры команд:
Команда | Описание | Пример |
---|---|---|
vv add | Поместить файл под версионный контроль. В отличие от Git в Veracity на удивление нет понятия staging. Все изменения в файле попадают в коммит. |
|
vv addremove | Добавить под версионный контроль новые файлы и убрать из под версионного контроля более не существующие файлы |
|
vv branch | Вывести список текущих веток или изменить ветки |
|
vv cat | Вывести содержимое файла под версионным контролем |
|
vv checkout | Создать новую рабочию копию локального репозитория (их может быть несколько) |
|
vv clone | Создать новую копию существующего репозитория. Затем из вновь созданного репозитория можно создать нужное количество рабочих копий. Работает аналогично git clone. Veracity поддерживает для работы с удаленными репозиториями только протокол HTTP. |
|
vv comment | Добавить еще один комментарий к коммиту в дополнение к указанному при создании коммита. Каждый вызов команды добавляет новую строчку с комментарием. Старые строчки сохраняются. |
|
vv commit | Создать коммит |
|
vv config | Изменить конфигурацию Veracity. Позволяет не только устанавливать значения конкретных опций, но и импортировать и экспортировать конфигурацию в JSON документ, а также сбрасывать конфигурацию на значения по-умолчанию. |
|
vv diff | Вывести различия между текущей ревизией и указанной ревизией. |
|
vv diffmerge | То же, что и diff, но для сравнения используется сторонняя программа DiffMerge, которую необходимо установить отдельно, иначе команда выдает ошибку. |
|
vv export | Копирует все файлы, находящиеся под версионным контролем, в отдельный каталог. |
|
vv fast-export | Позволяет сохранить полное состояние репозитория (содержимое файлов + метаданные) в один текстовый файл. Этот файл может быть затем импортирован на другом компьютере командой vv fast-import. |
|
vv fast-import | Инициализирует новый репозиторий из файла, созданного командой vv fast-import. |
|
vv heads | Выводит описания последних коммитов в каждой из активных веток репозитория (ветки можно закрывать при помощи vv branch close). |
|
vv help | Встроенная справочная система по командам Veracity. |
|
vv history | Позволяет просматривать список предыдущих коммитов. То же, что git log. |
|
vv incoming | Показывает какие изменения будут загружены с удаленного сервера. |
|
vv init | Создать новый локальный репозиторий. Требует указания имени репозитория и какой каталог сделать рабочим. Позже можно добавить другие рабочие каталоги. |
|
vv leaves | Показывает список «листьев», т.е. последних коммитов в ветках. |
|
vv lock | Блокирует файл для редактирования. |
|
vv locks | Показывает список файлов, заблокированных для редактирования. |
|
vv merge | Вливает изменения указанного коммита в текущее состояние файлов в рабочем каталоге. |
|
vv move | Перемещает указанный файл или директорию в новое место. |
|
vv outgoing | Показывает список изменений, которые будут загружены в текущий или указанный удаленный репозиторий. |
|
vv parents | Показывает список родительских коммитов для текущих измененных файлов. |
|
vv pull | Получить изменения из удаленного репозитория. То же, что git pull. |
|
vv push | Отправить изменения в удаленный репозиторий. То же, что git push. |
|
vv remove | Удалить файл из под версионного контроля и стереть его. |
|
vv rename | Переименовать файл. |
|
vv repo | Создать, изменить, удалить репозитории, а также вывести их список. |
|
vv resolve | Разрешить конфликты объединения файлов. |
|
vv revert | Откатить текущие изменения. |
|
vv serve | Позволяет запустить встроенное приложение Veracity для управления репозиторием. |
|
vv stamp | Позволяет добавлять и удалять штампы к указанным коммитам. |
|
vv status | Показывать состояние файлов в текущем рабочем каталоге. |
|
vv tag | Присвоить уникальное текстовое имя коммиту. |
|
vv unlock | Разблокирует файл, заблокированный при помощи vv lock. |
|
vv update | Обновить состояние рабочего каталога из репозитория (применяется после выполнения vv pull). |
|
vv user | Позволяет управлять учетными записями пользователей, использующих репозитории. |
|
vv version | Показывает текущую установленную версию Veracity. |
|
vv whoami | Показывает или устанавливает текущий пользовательский аккаунт. |
|
vv zip | Сохраняет содержимое репозитория в Zip-архив. |
|
Расположение файлов
Как уже было сказано раньше, Veracity хранит метаданные репозиториев отдельно от файлов рабочего каталога. Это позволяет иметь несколько рабочих каталогов. В документации по Veracity сказано, что он поддерживает несколько различных движков хранения, однако, по-умолчанию используется движок FS3. Этот движок использует базу данных SQLite3 и текстовые файлы, хранящие запросы к базе данных. Для того, чтобы иметь возможность просматривать содержимое базы вы можете установить расширение SQLite Manager для Firefox. По-умолчанию, все данные репозиториев хранятся в каталоге ~/.sgcloset/. Кроме того каждая рабочая копия имеет скрытый каталог .sgdrawer, содержащий ссылку на имя репозитория и некоторые другие метаданные. Если вы хотите игнорировать файлы репозитория, то поместите их в файл .sgignores или .vvignores, как показано здесь. Veracity на данный момент имеет всего 2 исполняемых файла — vv и vscript. Первый отвечает за исполнение команд версионного контроля, а второй позволяет запускать скрипты, написанные на Javascript.
Встроенное приложение Veracity
Как уже было сказано выше Veracity содержит встроенный веб-сервер и веб-приложение для управления проектом, использующим Veracity. Для того, чтобы запустить веб-приложение, просто введите команду:
$vv serve --port=8080 --public #Ключ --public разрешает подключение с удаленных хостов.
Приложение стартует на указанном порту и становится доступно из браузера. Вот как это выглядит:
На картинке видно, что указанный коммит имеет 3 комментария. Один добавлен при создании коммита, остальные с помощью команды vv comment.
Хостинг проектов Veracity
Разработчики Veracity понимают, что конкурировать с Git без наличия
Ссылки
- Официальный сайт
- Хостинг репозиториев Veracity
- Книга по Veracity, на данный момент единственное более-менее подробное описание основных команд и цикла работы.
Заключение
Информации по Veracity пока что не так много. Сами разработчики отвечают на вопросы пользователей на странице вопросов. Некоторые сведения можно почерпнуть из книги, указанной выше. Будем надеяться, что этот проект также найдет свое место под солнцем.
Автор: vaniaPooh