Система Subversion

При работе над какими-либо проектами, в особенности над такими, к которым требуется совместный доступ для разных разработчиков или участников, очень важно не потерять эффективный прогресс работы над этим проектом. А также иметь возможность гибкого отслеживания и внесения изменений в рабочие файлы. При этом не предпринимая каких-либо специальных действий для синхронизации/согласования проекта. Для таких целей существуют специализированные системы управления изменениями или системы контроля версий (СКВ). Хотя такие системы и разрабатывались специально для использования разработчиками программного обеспечения (ПО), однако, как показывает практика, они же бывают очень полезны и системным администраторам в их работе.

Системы контроля версиями позволяют эффективно решать такие задачи как предоставление организованного доступа к отслеживанию всей истории изменений. А также безопасное и быстрое восстановление прежних версий. Также такие системы координируют совместное редактирование файлов проекта. Минимизируя риск потери изменений для конкретного автора или участника проекта.

На данный момент самыми распространёнными СКВ являются Mercurial, Bazaar-NG, а также Arch. В Linux-системах самыми популярными СКВ заслуженно считаются Subversion и конечно же Git – система, разработанная самим Линусом Торвальдсом, создателем ядра Linux для организации распределённой разработки, улучшения и внесения изменений в код ядра участниками сообщества разработчиков Linux.

Установка Subversion

Рассмотрим установку пакета на примере ОС CentOS7. 

Устанавливаем httpd

yum install httpd -y
 

Устанавливаем сам пакет SVN

yum install mod_dav_svn subversion -y

Создаем файл апача

vi /etc/httpd/conf.d/subversion.conf

и вставляем в него следующий код

<Location /svn>
DAV svn
SVNParentPath /var/www/svn
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile /etc/svn-auth-users
Require valid-user
</LimitExcept>
</Location>

Запускаем httpd

systemctl start httpd

и добавляем его в автозагрузку

systemctl enable httpd

Самую свежую версию системы можно найти на официальном сайте subversion.tigris.org

Добавление SVN пользователей.

После установки пакета SVN необходимо создать пользователей которые будут работать с Subversion, делается это командой

htpasswd -cm /etc/svn-auth-users SVN_user

Как работает Subversion?

По-умолчанию сервер системы Subversion работает в виде отдельного модуля веб-сервера Apache. Он и является центральным хранилищем для проекта. Но для того, чтобы можно было эффективно использовать Subversion для задач администрирования (а не для разработки ПО), существует функциональная модель, основанная на специализированном демоне svnserve. Который должен запускаться от имени собственного пользователя во время начальной загрузки системы.

Поскольку одной из основных задач Subversion является организация многопользовательского доступа к проектам, причём пользователи могут быть из совершенно разных организаций. То и сама система доступа к файлам в Subversion отделена от системной модели прав доступа. В системе Subversion существует файл passwd, в котором хранятся учётные записи пароли для которых записаны в открытом текстовом виде. Об этом нужно помнить и всегда следить за тем, чтобы на файл passwd были установлены соответствующие права доступа для защиты его содержимого. Естественно, пароли, содержащиеся в этом файле никогда не передаются по сети.

Когда происходит первое подключение к серверу Subversion (и первый ввод пароля). То система создаёт в домашнем каталоге пользователя в подкаталоге .subversion копию этого пароля. Далее, при последующих подключениях авторизация может быть необязательной.

Для каждого корневого каталога проекта системы Subversion существует четкая организованная структура каталогов. Среди которых файл README, а также подкаталог conf, в котором хранится файл svnserve.conf, в котором, в свою очередь, хранятся инструкции. Согласно которым сервер должен предоставлять доступ к корневому или новому каталогу в репозитории. Пример конфигурации:

[general]
anon-access = none
auth-access = write
password-db = passwd
realm = The Sysadmin Repository

Использование Subversion

Для создания корневого каталога для проекта или просто репозитория достаточно выполнить несколько несложных команд:

$ cd /home/svn
$ mkdir repositories
$ cd repositories
$ svnadmin create techdocs
$ chmod 700 techdocs

Приведённая последовательность команд создаёт поддиректорию repositories в служебной директории svn каталога /home. Команда svnadmin create techdocs создаёт проект (точнее его корневой каталог) для совместного использования — techdocs.

Теперь можно запустить сервер Subversion для созданного хранилища:

$ svnserve --daemon --root /home/svn/repositories

Теперь можно подключиться к репозиторию, создав локальную копию его содержимого:

$ svn checkout --username john svn://someserver.repo.org/techdocs checkout
Authentication realm: <svn://someserver.repo.org:3580> The Sysadmin Repository
Password for 'john': <password>

После этого можно спокойно работать с файлами локальной копии проекта. В том числе и добавлять в него новые файлы:

$ cd checkout
$ vi doc1.txt
$ svn add doc1.txt

Для фиксирования сделанных изменений необходимо сделать коммит локального проекта в удалённое хранилище. Т. е. иными словами — синхронизацию проекта с записью истории изменений:

$ svn commit -m "Initial checkin; added doc1.txt"

При этом, если не указывать опцию -m явно (для добавления комментария для коммита), то Subversion автоматически запустит текстовый редактор для редактирования сопровождающего сообщения. Перечислять все новые и изменённые файлы нет смысла (хотя такая возможность есть), поскольку Subversion сделает это самостоятельно — в этом его основная задача.

Для того, чтобы получить актуальную копию проекта нужно выполнить внутри проекта команду:

$ svn update

При этом все файлы локальной копии будут объединены с файлами из удалённого хранилища согласно актуальным изменениям. А также при условии отсутствия конфликтов. Файлы, имеющие конфликты, будут иметь метку «conflicted». Такие файлы не регистрируются для синхронизации с главным хранилищем до устранения всех конфликтов. Когда конфликты решены, следует сообщить об этом системе:

$ svn resolved doc1.txt

Также есть возможность узнать у Subversion, какие файлы, кем и в какое время модифицировались. Для этого нужно дать команду:

$ svn blame doc2.txt

В результате будет выведено содержимое запрошенного файла, содержащего для модифицированных строк ссылки, указывающие информацию об авторе и дате/времени данных изменений.

Если же нужно узнать об изменениях в рамках конкретного периода времени. Например с 27 июля 2018 г., то нужно воспользоваться следующей командой:

$ svn diff -r "{2018-07-27}" foo.с

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: