ДонНТУ > Портал магистров ДонНТУ RUS
Магистр ДонНТУ Ильенко Олег Витальевич
ИЛЬЕНКО ОЛЕГ ВИТАЛЬЕВИЧ
Факультет: Вычислительной техники и информатики
Специальность: Программное обеспечение
Тема выпускной работы: Исследование эффективности распределенной системы с базами данных
Руководитель: Ладыженский Юрий Валентинович
E-Mail: ora_dba@bk.ru

Cистема контроля версий

На этой странице вы можете ознакомиться с сутью моей индивидуальной работы.

В качестве индивидуального задания у меня было создание на одном из сервером ДонНТУ системы контроля версий. Описане деталей индивидуального задания Вы сможете прочитать ниже. Причиной, по которой я выбрал такое индивидуальное задание, послужил тот факт, что индиыидуальное магистерскую работу я выполняю не сам, а с моим одногрупником. В связи с этим нам понадобился такой инструмент, который позволил бы нам совместно работать над одним и тем же проектом.

Введение


Система контроля версий позволяет разработчикам хранить прошлые версии файлов из разработки и доставать их оттуда. Она хранит информацию о версии каждого файла (и полную структуру проекта) в коллекции, обычно называемой репозиторием .

Внутри репозитория могут быть несколько параллельных линий разработки, обычно называемых ветвями . Это может быть полезно для хранения стабильной или выпущенной(released) версии ветви, одновременно продолжая работу над рабочей версией. Другой вариант – это открыть выделенную ветвь для работы над экспериментальной возможностью.

Система контроля версий также позволяет пользователям дать ярлык(label) снимку(snapshot) ветви (часто называемых как тэги) для легкого доставания. Это полезно для обозначения индивидуальных релизов или самых свежих рабочих версий, предназначенных для использования.

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

Традиционно, де-факто системой контроля версий стала CVS, но потом появилось много других, которые помогают лучше.

Актуальность проблемы


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

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

2. Второй довод заключается в следующем: эта система может быть полезна в образовательных целях. Во-первых, так как мы прикладные программисты, в будущем мы будем участвовать в проектах и работать в коллективе. Работать в такой среде трудно без системы контроля версий. Развертка подобного сервера, будет только стимулировать студентов на создание, комплексных проектов. Опыт работы с подобной системой должен помочь студентам в будущем, уже не говоря об опыте работы в команде разработчиков. Не имеются в виду все студенты, к сожалению, таких студентов будет немного. Но зато это будут те студенты которым это действительно нужно, и которые стремятся достичь хороших успехов в своем образовании. Важным фактором в этом процессе, является поддержка преподавателей этой идеи (по крайней мере первое время, пока студенты не узнают, что такое есть и что в этом хорошего). Другими словами дать тем студентам шанс, которые смогут им воспользоваться. Изучение работы с SVN не так уж и сложно и вполне доступно. Намного важнее и сложнее, научиться работать в команде.

3. Помимо того, что система контроля версий позволяет легко работать над одним проектом нескольким людям, она также позволяет публиковать свои проекты. Если посмотреть на OpenSource'ные проекты, то большинство из них, помимо архива с исходниками, предоставляет всем доступ к CVS. Все чаще и чаще стали появляться SubVersion рапозитории. Например, если магистр или кто-либо другой написал магистерскую работу, защитил ее на 5 и хочет, чтобы все посетители его странички магистра (которую мы должны сделать в этом семестре) в будущем смогли изучить его работу, должен всего лишь поместить ссылку на репозиторий:https://donntu.ru:443/repository/my-project/ Этого будет вполне достаточно. После перехода по этой ссылке, посетитель сможет в своем браузере просматривать полностью весть проект. Это очень удобно, к тому же на сегодняшний день это является, своего рода, стандартом.

Мировой опыт


На сегодняшний день в мире существует множество организаций, которые используют системы контроля версий в своей повседневной работе. Практически каждая фирма, производящая программное обеспечение использует их. Но помимо коммерческих организаций системы контроля версий используются в университетах по всему миру. Так например можно выделить статью двух профессоров университета в Торонто: Gregory V. Wilson и Karen Reid. В своем новом проекте они пытаются создать среду для студентов, в которой они хотят использовать системы контроля версий, issue trackers, web-логи. Эта статья размещена в Интернете по адресу: http://www.third-bit.com/helium/proposal-2004-02.html.

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

Интересно также, что в США департамент образования также занимается этим вопросом. Внедрение подобных систем происходит на государственном уровне. Следуя следующей ссылку вы сможете прочитать об этом:

https://applicationlink.labworks.org/scied/Abstracts2001/ORNLcs.htm. Подзаголовок: Software Version Control For Multi-Collaboration Software Project.

Помимо этого есть уже существующие системы, описанные выше. К примеру можно назвать проект OpenSeminar. Это основанная на Web-технологиях среда, позволяющая осуществлять студентам и преподавателям совместную работу. Следуя этой ссылке, вы сможете больше узнать об этом проекте: http://open.ncsu.edu/mrappa/collaboratecom2005.pdf

Описание VCS и выбор


Общие возможности


Система контроля версий может быть любой формы и размеров, но есть основные положения об их архитектуре. Некоторые системы поддерживают Атомарные Фиксации ( Atomic Commits ) , которые значат, что состояние всего репозитория меняется полностью. Без Атомарных Фиксаций, каждый файл или часть( unit ) меняется отдельно и поэтому состояние всего репозитория в любой точке не может быть зафиксировано.

Большинство обычных VCS ( Version Control System ) систем позволяют объединять изменения между ветвями. Это значит, что изменения, зафиксированные в одной ветви будут зафиксированы в главной линии или в другой ветви с помощью одной автоматической или, по крайней мере, полу-автоматической операцией.

Распределенная система контроля версий позволяет клонировать удаленный репозиторий, производя точную копию. Она также позволяет распростанять изменения из одного репозитория на другой. В нераспределенных VCS разработчику нужен репозиторий для того, чтобы зафиксировать изменения в нем. Это делает разработчика без доступа к репозиторию человеком второго сорта. С распределенной VCS каждый разработчик может склонировать главный репозиторий, поработать над ним и потом распространить свои изменения на главный репозиторий.

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

Из всех этих возможностей CVS поддерживает только объединение изменений.

Альтернатива первая – CVS


CVS, Система Параллельных Версий – зрелая и относительно надежная система контроля версий. Много проектов с открытыми исходными кодами, включая KDE, GNOME и Mozilla используют CVS . Большинство центров открытых исходных кодов, такие как SourceForge, предлагают CVS как сервис, поэтому ее используют многие другие проекты.

Несмотря на свою популярность, CVS имеет ограничения. Например, она не поддерживает переименование файлов и директорий. Кроме того, бинарные файлы не обрабатываются достаточно хорошо. CVS – нераспределенная система и атомарные фиксации изменений не поддерживаются. Так как уже есть лучшие альтернативы, которые содержат более широкий набор функций, вы, возможно, предпочтете начать новый проект используя что-то другое.

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

Коммиты

не атомарные

Перемещение и переименование файлов и директорий

нет

Копирование файлов и директорий

нет

Репликация, создание удаленной копии репозитория

нет

Прием изменений из удаленного репозитория

нет

Разграничение доступа к различным частям репозитория

ограниченно, через "pre-commit hook scripts"

Changesets - объединение группы связанных изменений в разных файлах в один логический блок

нет

Подробная история построчных изменений

да

Возможность получения отдельной директории из репозитория

да

Контроль изменений в рабочей копии, до commit'а в репозиторий

да, cvs diff

Задание отдельного текста комментария для отдельного файла при commit'е

нет, только на блок изменений

Качество и объем документации

отлично

Простота установки, зависимость от стороннего ПО

хорошо, cvs есть в пакетах к системе, ничего доустанавливать не нужно

Совместимость команд с CVS

да

Сервер для доступа по сети

да

Web интерфейсы пользователя

множество (WebCVS, ViewCVS, Chora, wwCVS)

GUI интерфейсы пользователя

множество (WinCVS, Cervisia (KDE)), встроенная поддержка во многих IDE

Лицензия

GPL

Альтернатива вторая – Subversion


Subversion стремится быть лучшей альтернативой CVS . Она поддерживает большинство соглашений CVS , включая большую часть набора команд, поэтому пользователи CVS быстро почувствуют себя как дома. Subversion предлагает много полезных улучшений по сравнению с CVS : копирование и переименование файлов и директорий, настоящие атомарные фиксации, эффективная обработка бинарных файлов, способность сетевой работы по HTTP (и HTTPS ). Subversion также имеет родной Win32 клиент и сервер.

Сервис Subversion на основе HTTP (или HTTPS ) труден для развертывания, по сравнению с другими системами, так как он требует установленной службы Apache 2 со своим собственным специальным модулем. Также есть " svnserve " сервер, который менее способен, но более прост в установке (и быстрее) и использует специальный протокол. Кроме того, поддержка Subversion объединения изменений ограничена и похожа в этом на CVS (т.е., объединение ветвей, где файлы были перемещены не будет выполнено корректно). Она также относительно требовательна к ресурсам, особенно на крупных операциях.

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

Коммиты

атомарные

Перемещение и переименование файлов и директорий

да

Копирование файлов и директорий

да

Репликация, создание удаленной копии репозитория

через внешние скриты (SVN::Mirror, svn-push)

Прием изменений из удаленного репозитория

через внешние скриты (SVN::Mirror, svn-push)

Разграничение доступа к различным частям репозитория

да, через средства WebDAV

Changesets - объединение группы связанных изменений в разных файлах в один логический блок

частично реализовано

Подробная история построчных изменений

да

Возможность получения отдельной директории из репозитория

да

Контроль изменений в рабочей копии, до commit'а в репозиторий

да

Задание отдельного текста комментария для отдельного файла при commit'е

нет

Качество и объем документации

отлично

Простота установки, зависимость от стороннего ПО

Тянет за собой Apache 2 и WebDAV. Часто есть в пакетах

Совместимость команд с CVS

да

Сервер для доступа по сети

WebDAV+DeltaV или собственный протокол

Web интерфейсы пользователя

множество (ViewCVS, SVN::Web, WebSVN, ViewSVN, mod_svn_view, Chora, Trac, SVN::RaWeb::Light, SVN Browser, Insurrection)

GUI интерфейсы пользователя

множество (RapidSVN, Jsvn)

Лицензия

Apache/BSD-style

Выбор системы контроля версий


Я предлагаю, в качестве системы контроля версий, использовать VCS SubVersion. Мой выбор обусловлен тем, что SubVersion является более новой системой, она более проста в использовании и администрировании. Также важным, на мой взгляд, преимуществом SubVersion, является то, что в качестве сервера может выступать HTTP сервер Apache с поддержкой расширения WebDAV. Таким образом имеется возможность настройки HTTP-сервера (HTTPS) с авторизацией на HTTP-уровне.

В дополнение ко всему вышесказанному, выбор системы SubVersion избавляет администраторов сети от ряда проблем, связанных с открытием дополнительного порта и соответственно настройки файервола. Сервер будет использовать только стандартные порты: 80 для HTTP и 443 для HTTPS.

Технические характеристики и требования SVN


Чтобы транслировать Ваш репозиторий через HTTP, Вам по существу необходимо четыре компонента, доступные в двух пакетах. Вам будет нужен Apache httpd 2.0.54, mod_dav - DAV модуль, идущий с ним, Subversion и mod_dav_svn - провайдер файловой системы, идущий в дистрибутиве Subversion. Как только у Вас будет доступ ко всем этим компонентам, процесс трансляции вашего репозитория будет простым:

Выполнить первые два пункта Вы можете скомпилировав httpd и Subversion из исходных кодов, или установить уже собранные бинарные пакеты на Вашу систему.

В качестве операционной системы могут быть использованы следующие: Windows 2000 или XP (или старше), UNIX или Linux.

Если при работе с SVN потребуется обеспечить защищенный канал связи, то может быть использован модуль SSL. Для этого необходимо установить модуль OpenSSL в httpd сервер, а также произвести его настройку.

Выводы


Выше была поставлена задача и пути ее решения. Из всех альтернатив была выбрана система контроля версий SVN. Выбор обусловлен тем, что эта система является новым и развивающимся проектом. Во многих областях она предоставляет нам большую функциональность и простоту работы. Так как одной из целей создания сервера является предоставление публичного доступа к репозиторию, то способность SubVersion предоставлять его по HTTP и HTTPS протоколу является для нас решающей. К тому же это решение избавит системных администраторов от множества проблем связанных настройкой, администрированием и обеспечением безопасности.

Перечень ссылок


ДонНТУ > Портал магистров ДонНТУ RUS