SVN, SVK · 2 min read · Feb 13, 2026

Создание только для чтения зеркала вашего SVN репозитория с помощью SVK

Создание только для чтения зеркала вашего SVN репозитория с помощью SVK

Предположим, у вас есть SVN для вашего OpenSource проекта, и вы хотите создать его зеркало в каком-то удаленном месте, которое хостит проекты с открытым исходным кодом (таких как SourceForge.net или dev.java.net). Я пропущу этап регистрации аккаунта и проекта и предположу, что у вас уже есть ваши учетные данные и URL репозитория SVN. Я также предполагаю, что вы на Debian или Ubuntu, и ваш SVN работает под Apache httpd.

Существует инструмент под названием svnsync, который поставляется с SVN 1.4 по умолчанию и предназначен именно для этой цели, но есть одна вещь, которая мешает нам его использовать в этом случае. Он требует наличия пользовательского svn hook в целевом репозитории, и в нашем случае невозможно что-либо настроить.

Что вам нужно сделать, так это сначала установить SVK:

# aptitude install svk

Грубо говоря, SVK является надмножеством SVN и, таким образом, позволяет выполнять некоторые продвинутые трюки, такие как синхронизация репозиториев. Существует книга “Управление версиями с SVK”, на которую вы можете сослаться как на подробное руководство по SVK. Я постараюсь быть кратким. Концепция заключается в том, что вы создаете репозиторий SVK (“депо”), который будет содержать копию всех вовлеченных репозиториев SVN (вашего основного репозитория и тех, в которые вы сбрасываете информацию), а затем синхронизируете эти копии.

Поскольку мы хотим, чтобы репозитории синхронизировались каждый раз, когда выполняется коммит, будет использована процедура SVN hooks, и в нашем случае это произойдет под пользователем apache httpd.

Итак, чтобы упростить задачу, давайте войдем под этой учетной записью и выполним необходимую рутину.

# su www-data

Теперь нам нужно инициализировать стандартное депо.

$ svk depotmap

Отредактируйте путь, чтобы указать, где вы хотите хранить депо. Я выберу /var/opt/svk/local.

Теперь вы можете создать как минимум 2 зеркала: одно для локального репозитория и одно для удаленного (ничто не мешает вам иметь несколько зеркал):

$ svk mirror //local file:///var/opt/svn

Таким образом, мы сопоставили расположение репозитория (названное “local”) непосредственно с местоположением файловой системы, где находится репозиторий svn.

$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myproject

То же самое касается удаленного репозитория, в данном случае размещенного на SourceForge.net. Вам нужно будет постоянно принять сертификат и предоставить ваше имя пользователя и пароль для кэширования.
Поскольку удаленный репозиторий будет только для чтения, мы синхронизируем его только один раз

$ svk sync //remote

а затем выполним действия, которые позже будут выполнены скриптом post-commit.

$ svk sync //local  
$ svk smerge --baseless --incremental --verbatim //local //remote

Последняя команда синхронизирует локальный репозиторий с удаленным, сохраняя все детали коммита.
Чтобы это происходило автоматически после выполнения коммита в локальный репозиторий, создайте файл с именем post-commit в директории hooks вашего локального репозитория SVN и поместите в него эти команды. Сделайте его исполняемым с помощью

$ chmod +x ./post-commit #предполагая, что вы находитесь в директории ''hooks''

Вот и все, проверьте это.

<пожалуйста, обратите внимание, что учебник был создан>

Алекс Янченко, www.centricware.org

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.