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
Get new posts in your inbox
No spam. Unsubscribe anytime.