Встречаем Veracity — новую распределенную систему контроля версий

в 5:33, , рубрики: DVCS, Git, scm, Программирование, Системы управления версиями, метки: ,

Встречаем Veracity — новую распределенную систему контроля версий
Здравствуй, мой любознательный %username%!

Несколько месяцев назад я случайно наткнулся на еще одну перспективную систему управления версий — Veracity, о которой и хотел бы сегодня рассказать, чтобы тебе было что поковырять на выходных. Несмотря на то, что разработка Veracity идет уже больше года, на Хабре ее имя было лишь пару раз вскользь упомянуто в комментариях. Под катом тебя ждет краткое описание Veracity и ссылки, где можно получить более подробную информацию о ней.

Итак, Veracity (англ. «правдивость», «достоверность», «точность») — это распределенная система контроля версий, схожая с Git, разрабатываемая по лицензии Apache 2.0 в фирме SourceGear.

Основные отличия от Git

  1. Наличие локальных номеров ревизий. Veracity, как и Git, использует криптографические хэш-функции для версионного контроля отдельных файлов. Однако в локальном репозитории каждый коммит получает уникальный номер ревизии, как это происходит в Subversion. Номер ревизии и хэш могут использоваться наравне друг с другом и часто указываются через двоеточие.
  2. Поддержка нескольких хэш-функций. Всем известно, что Git в своей работе использует функцию SHA-1. Veracity позволяет выбрать между SHA-1, SHA-2 или Skein.
  3. Формальное переименование файлов. Git при переименовании файлов реально удаляет файл, а затем создает файл с таким же содержимым и новым именем. Veracity делает именно переименование существующего файла.
  4. Поддержка блокировок файлов. Централизованные системы контроля версий наподобие Subversion поддерживают 2 схемы работы: блокировка файлов (svn lock svn unlock) и слияние изменений (svn merge). Хотя Git и другие распределенные системы контроля версий часто используют в работе центральный репозиторий, в них отсутствует механизм блокировки файлов. Veracity исправляет этот недостаток. Понятно, что для блокировки файлов, необходим доступ к удаленным репозиториям через сеть.
  5. Поддержка штампов. Veracity включает в себя абсолютно новую функциональность, называемую штампами. Штамп (stamp) — это отметка из произвольного текста, которую разработчик может прикрепить к любому коммиту. В отличие от тегов (tag), сопоставляющих каждому коммиту уникальное имя, один и тот же штамп может помечать произвольное число коммитов. Например, при использовании системы непрерывной интеграции можно ставить штамп «Tests passed» на коммиты, прошедшие серию тестов без ошибок, ровно также как производители техники ставят штампик «qc pass» (quality controll passed) на каждый произведенный образец.
  6. Децентрализованная база данных репозитория. Многие системы контроля версий хранят данные о репозитории внутри рабочего каталога. Например, Git имеет папку .git, в которой хранятся бинарные объекты, деревья, объекты коммитов, индекс, конфигурация, хуки и т.д. Veracity хранит большинство служебной информации о репозитории вне рабочего каталога в специальной базе данных. Это, например, позволяет иметь сразу несколько рабочих каталогов для одного репозитория.
  7. Встроенный интерпретатор Javascript. Veracity использует Javascript в качестве основного скриптового языка. Например, можно писать хуки в виде функций Javascript. Также имеется встроенный API для Javascript, который можно использовать для написания серверной части веб-приложений, использующих Veracity. Вполне логично, что для хранения сериализованных данных используется JSON.
  8. Встроенное веб-приложение для обзора репозитория. Одной командой можно запустить встроенный веб-сервер с приложением, позволяющим просматривать содержимое репозитория, историю изменений, статус сборки проекта или баг-трекер.

Установка

Процедура установки самая обыкновенная и имеет 2 возможных альтернативы:

  1. Собрать из исходных кодов. Система написана на языке C, как и некоторые другие системы контроля версий (например, Git, Subversion или Fossil), поэтому нам придется иметь дело с установкой исходных кодов зависимостей и утилитами наподобие cmake и make. Для тех, кто любит подобные вещи вот инструкции по сборке для Linux и для Windows.
  2. Установить из бинарного пакета. Чтобы быстрее начать ковырять Veracity, гораздо проще будет воспользоваться бинарными пакетами, которые можно скачать на странице загрузок. Имеются бинарные пакеты для Debian-совместимых систем (*.deb: x86, x64) и для Windows (*.msi: x86, x64).

Основные команды

Для работы с Veracity используется короткая команда vv. Ниже приведен список основных операций Veracity и примеры команд:

Команда Описание Пример
vv add Поместить файл под версионный контроль. В отличие от Git в Veracity на удивление нет понятия staging. Все изменения в файле попадают в коммит.
$vv add filename1 filename2 ~/thisdir
vv addremove Добавить под версионный контроль новые файлы и убрать из под версионного контроля более не существующие файлы
$vv addremove dirname1
vv branch Вывести список текущих веток или изменить ветки
$vv branch
$vv branch add devel
vv cat Вывести содержимое файла под версионным контролем
$vv cat filename
vv checkout Создать новую рабочию копию локального репозитория (их может быть несколько)
$vv cat filename
vv clone Создать новую копию существующего репозитория. Затем из вновь созданного репозитория можно создать нужное количество рабочих копий. Работает аналогично git clone. Veracity поддерживает для работы с удаленными репозиториями только протокол HTTP.
$vv clone http://example.com/repos/reponame reponame
vv comment Добавить еще один комментарий к коммиту в дополнение к указанному при создании коммита. Каждый вызов команды добавляет новую строчку с комментарием. Старые строчки сохраняются.
$vv comment --rev=123 --message='A new comment'
vv commit Создать коммит
$vv commit --message='Commit message'
vv config Изменить конфигурацию Veracity. Позволяет не только устанавливать значения конкретных опций, но и импортировать и экспортировать конфигурацию в JSON документ, а также сбрасывать конфигурацию на значения по-умолчанию.
$vv config set whoami/username vania-pooh
vv diff Вывести различия между текущей ревизией и указанной ревизией.
$vv diff --rev=3 filename
vv diffmerge То же, что и diff, но для сравнения используется сторонняя программа DiffMerge, которую необходимо установить отдельно, иначе команда выдает ошибку.
$vv diff --rev=3 filename
vv export Копирует все файлы, находящиеся под версионным контролем, в отдельный каталог.
$vv export reponame ~/copyhere
vv fast-export Позволяет сохранить полное состояние репозитория (содержимое файлов + метаданные) в один текстовый файл. Этот файл может быть затем импортирован на другом компьютере командой vv fast-import.
$vv fast-export reponame ~/backupname.fi
vv fast-import Инициализирует новый репозиторий из файла, созданного командой vv fast-import.
$vv fast-import --hash=SHA2/512 ~/backupname.fi
vv heads Выводит описания последних коммитов в каждой из активных веток репозитория (ветки можно закрывать при помощи vv branch close).
$vv heads
vv help Встроенная справочная система по командам Veracity.
$vv help branch new 
vv history Позволяет просматривать список предыдущих коммитов. То же, что git log.
$vv history 
vv incoming Показывает какие изменения будут загружены с удаленного сервера.
$vv history 
vv init Создать новый локальный репозиторий. Требует указания имени репозитория и какой каталог сделать рабочим. Позже можно добавить другие рабочие каталоги.
$vv init reponame dirname
vv leaves Показывает список «листьев», т.е. последних коммитов в ветках.
$vv leaves
vv lock Блокирует файл для редактирования.
$vv lock filename
vv locks Показывает список файлов, заблокированных для редактирования.
$vv locks
vv merge Вливает изменения указанного коммита в текущее состояние файлов в рабочем каталоге.
$vv merge -r 37939b07309af8232c44048ca0a1633c982b7506
vv move Перемещает указанный файл или директорию в новое место.
$vv move filename ~/newdir
vv outgoing Показывает список изменений, которые будут загружены в текущий или указанный удаленный репозиторий.
$vv outgoing
vv parents Показывает список родительских коммитов для текущих измененных файлов.
$vv parents
vv pull Получить изменения из удаленного репозитория. То же, что git pull.
$vv pull #Для того, чтобы применить изменения к рабочему каталогу следует использовать команду vv update
vv push Отправить изменения в удаленный репозиторий. То же, что git push.
$vv push #Для того, чтобы не указывать удаленный репозиторий нужно прописать его в конфигурации
vv remove Удалить файл из под версионного контроля и стереть его.
$vv remove ~/repo/filename
vv rename Переименовать файл.
$vv rename ~/repo/oldfile ~/repo/newfile
vv repo Создать, изменить, удалить репозитории, а также вывести их список.
$vv repo info
vv resolve Разрешить конфликты объединения файлов.
$vv resolve ~/filename #Спрашивает как разрешить конфликт для каждой конфликтующей строчки файла
vv revert Откатить текущие изменения.
$vv revert ~/filename1 ~/filename2
vv serve Позволяет запустить встроенное приложение Veracity для управления репозиторием.
$vv serve --port=8080 --public
vv stamp Позволяет добавлять и удалять штампы к указанным коммитам.
$vv stamp add approved --rev=3
vv status Показывать состояние файлов в текущем рабочем каталоге.
$vv status
vv tag Присвоить уникальное текстовое имя коммиту.
$vv tag add tagname --rev=3
vv unlock Разблокирует файл, заблокированный при помощи vv lock.
$vv unlock filename
vv update Обновить состояние рабочего каталога из репозитория (применяется после выполнения vv pull).
$vv update
vv user Позволяет управлять учетными записями пользователей, использующих репозитории.
$vv user create vania-pooh
vv version Показывает текущую установленную версию Veracity.
$vv version
vv whoami Показывает или устанавливает текущий пользовательский аккаунт.
$vv whoami anotherUser
vv zip Сохраняет содержимое репозитория в Zip-архив.
$vv zip ~/backup/archive.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 разрешает подключение с удаленных хостов.

Приложение стартует на указанном порту и становится доступно из браузера. Вот как это выглядит:
Встречаем Veracity — новую распределенную систему контроля версий
На картинке видно, что указанный коммит имеет 3 комментария. Один добавлен при создании коммита, остальные с помощью команды vv comment.

Хостинг проектов Veracity

Разработчики Veracity понимают, что конкурировать с Git без наличия хостинга проектов наподобие Github будет очень трудно. Именно поэтому совсем недавно был запущен сайт onveracity.com. В целом сайт повторяет функциональность Github, а скриншоты можно посмотреть на его главной странице.

Ссылки

Заключение

Информации по Veracity пока что не так много. Сами разработчики отвечают на вопросы пользователей на странице вопросов. Некоторые сведения можно почерпнуть из книги, указанной выше. Будем надеяться, что этот проект также найдет свое место под солнцем.

Автор: vaniaPooh

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js