Материал просмотрен 266 раз(а)

Статья в процессе дополнения.

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

На самом деле можно использовать практически в любой сфере программирования, веб разработки, написания текстов и т.д.

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

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

Интересно? Продолжаем.

Настройки серверной части

Устанавливаем пакет subversion из командной строки:

# yum -y install subversion

svn-install

После того, как приложение будет установлено, создадим каталог для хранения всех репозиториев. У меня это будет /var/svn, но вы можете выбрать произвольный путь (внося соответствующие правки во все команды далее по тексту):

# mkdir /var/svn

Далее создадим новый репозиторий командой svnadmin. Допустим, мы делаем совместный проект над каким-либо сайтом www.aaa.ru. Не будем мудрствовать лукаво, создадим репозиторий прямо в таком виде:

# svnadmin create /var/svn/www.aaa.ru

Попутно можно вывести информацию о репозитории, командой svn info, указав протокол доступа к хранилищу. Для локального хранилища подойдёт протокол file://

svncreate

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

Идём дальше. Репозиторий создан. Пора добавить в него хоть какие-нибудь файлы.

Создадим временный каталог test с одним единственным файлом index.php, следующего содержания:

<?php
// main file
?>

Импортируем этот каталог в наш репозиторий. Обратите внимание, используется команда:

# svn import test file:///var/svn/www.aaa.ru -m "Index file"

где test – имя нашего каталога, содержимое которого помещается в хранилище; далее идёт указание самого хранилища, а так же присутствует ключ -m с комментарием. Все комментарии учитываются, чтобы потом можно было вспомнить что и зачем менялось в конкретной ревизии, поэтому рекомендуется давать осмысленные и грамотные пояснения своим действиям.

import_1

Видим сообщение

Adding test/index.php
Committed revision 1.

Это значит, что добавился файл test/index.php, а номер ревизии сменился на 1.

Если мы повторим команду запроса info, то увидим, что наши изменения ревизии учитываются.

Как работать с клиентов Linux

Для того, чтобы работать с клиентов на базе OS Linux, нужно будет установить пакет subversion (см. начало статьи), поскольку оно включает в себя как сервер, так и клиент. (P.S. Существую и графические приложения, я уверен, но сейчас речь о консоли)

Итак, предположим, что для своей работы мы выбрали протокол ssh, как достаточно безопасный.

Получим файлы с нашего репозитория в рабочую копию. Рабочей копией называется локальная копия репозитория, в которой производятся все изменения. По окончании правок эта копия закачивается обратно в хранилище (Коммит), при этом увеличивая ревизию и обновляя файлы в каталогах.

Не забываем поднять SSH на сервере с репозиторием!

$ svn co svn+ssh://dmitry@192.168.1.104/var/svn/www.aaa.ru

cocheckout – означает копирование репозитория в рабочий каталог.

При этом у нас дважды спросят пароль пользователя dmitry (в дальнейшем мы это уберем).

svn-ssh

Нетрудно заметить, что создалась локальная папка www.aaa.ru с содержимым репозитория.

Я немного изменил код файла (см.ниже вывод команды cat index.php). И закоммитил изменения с комментарием “Add 3 line“. Опять же введя пароль это удалось сделать.

svn_mod2

Честно говоря, надоело вводить пароль постоянно. Сгенерирую ключи SSH:

$ ssh-keygen -t rsa

на предложение ввести парольную фразу отвечу пустым паролем. Затем импортирую публичный ключ на удаленный сервер:

$ ssh-copy-id -i /home/dmitry/.ssh/id_rsa.pub dmitry@192.168.1.104

Здесь потребуется один раз ввести пароль от удаленной учетки dmitry, чтобы удостовериться, что мы можем добавлять в неё ключи.

Теперь, как мы можем проверить, пароль не спрашивается при закачке репозитория и коммитах. Намного удобнее и быстрее.

Если вдруг нужно добавить новый файл – это делается командой import (как мы выше создавали файл index.php на сервере), аналогичным образом импортируем каталог ТОЛЬКО с теми файлами, которых на сервере нет.

Допустим:

svn-add

Иначе, можно просто создать новый файл в нашем временном рабочем каталоге и добавить его в репозиторий так:

$ svn add <имя файла>
$ svn commit

Будет точно так же закачан файл и обновлена ревизия.

Этими функциями subversion не ограничивается. Всегда можно посмотреть полный список так:

$ svn help

Кстати, здесь я предлагаю схитрить. Если мы постоянно работаем в консоли и используем один и тот же путь к репозиторию (вы заметили, что неудобно набивать его руками каждый раз?), можно создать переменную окружения для удобства. А то и вообще потом поместить её в свой стартовый файл оболочки:

$ repo='dmitry@192.168.1.104/var/svn/www.aaa.ru'
$ svn log svn+ssh://$repo

Намного удобнее использовать. Кстати, команда log показывает всю историю изменений репозитория:

log

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

diff

Поясняю. + перед строкой – означает, что она добавилась. – что исчезла.

Работа с Subversion с клиентами по Windows

Есть много хорошего софта. Наиболее популярен тут TortoiseSVN, бесплатный.

Подключаем наш репозиторий:

2015-03-02 23-53-02 URL

Далее вводим аутентификационные данные (пока не добавили ключ Windows машины) и увидим наш репозиторий:

2015-03-03 00-00-34 svn+ssh   192.168.1.104 var svn www.aaa.ru - Repository Browser - TortoiseSVN

Пункты меню – аналогичные. Делаем Чекаут (загрузку репо в каталог), меняем файл. Делаем коммит и готово!

2015-03-03 00-05-25 Скриншот экрана

На самом деле эта система просто идеальна для программистов, совместно работающих над каким-нибудь крупным проектом, поскольку позволяет распределить рабочую область на нескольких людей, отслеживать версии и изменения.

Кроме того, существует возможность не просто сравнивать между собой несколько ревизий, но ещё и откатывать изменения обратно, объединять ревизии в окончательный билд, игнорируя определенные сборки, но включая изменения внесенные на других этапах. В общем весьма гибкая система, заслуживающая внимания.