Web разработка. Эффективное управление проектами (Subversion)

Существует мнение, что системы управления версиями предназначены исключительно для команд профессиональных программистов и бесполезны при самостоятельной разработке. В этой статье я постараюсь объяснить, почему это не так.
Но, прежде всего несколько слов о самих системах управления версиями. Это программное обеспечение предназначено для облегчения работы с постоянно изменяющимися файлами. Оно обеспечивает возможность сохранения промежуточных состояний файлов, создания нескольких версий одного файла (или их набора), позволяет переносить изменения между различными версиями файлов, просматривать внесенные изменения и многое другое.
Самое главное достоинство таких систем состоит в том, что из них не может исчезнуть информация. Т.е. всегда можно вернуться к однажды сохраненной версии файла, независимо от того, какие изменения были в него внесены.
Рассмотрим простой пример. Допустим, вы делаете web страницу. Проект состоит из трех файлов (с разметкой, таблицей стилей и скриптами). На каком-то этапе вы получили приемлемый внешний вид, но решили немного поэкспериментировать. Естественно эти эксперименты затронут все три файла, причем изменения будут внесены в различные их части.
Чтобы сохранить текущую версию проекта, вы делаете копию его файлов и экспериментируете уже с ними. Через некоторое время у вас накапливается десяток таких копий. И тут… вы находите ошибку в скриптах. Естественно, исправить ее нужно во всех копиях. И начинается карусель: "открыть" - "найти" - "вставить" - "сохранить" - "закрыть" - "перейти в следующую папку" - "повтор".
Если вы работаете в команде (даже из двух человек), то количество таких ситуаций растет как снежный ком. Потому что сюда добавляются исправления, сделанные вашим напарником.
Именно для таких ситуаций и разработаны системы управления версиями. Принцип их работы довольно простой. Для хранения информации создается специальное хранилище (что-то вроде базы данных), в котором сохраняются все внесенные в файлы изменения. Естественно, сохранение происходит исключительно по вашему желанию, и возвращаться вы сможете только к сохраненным состояниям.
Если вы работаете в команде, и несколько человек попытаются сохранить один и тот же файл, но с различными изменениями, система выдаст сообщение о возникновении коллизии. В этом случае разработчики договариваются между собой, какие изменения оставить и вносят их в хранилище.
Но эта статья об использовании систем управления версий при индивидуальной разработке, поэтому проблемы команд мы здесь рассматривать не будем.
Думаю, теории достаточно, переходим к реализации.
Выбор системы контроля версий
На сегодняшний день существует множество таких систем как платных, так и бесплатных с открытым исходным кодом. Из бесплатных, наибольшее распространение получили CVS и Subversion. Последняя появилась значительно позже и изначально позиционировалась как замена CVS. В Subversion реализован ряд возможностей, отсутствующих в CVS, что делает ее более привлекательной для новых проектов.
Установка и настройка Subversion
Здесь все предельно просто. Качаете с официального сайта дистрибутив и запускаете инсталлятор.
После установки вы сможете работать… но только через консоль. Естественно, это позволяет детально изучить работу системы, но вводить каждый раз имена файлов… мягко говоря, не очень удобно
.
Поэтому советую сразу скачать какой-нибудь графический клиент для Subversion. Полный их список находится здесь.
Я пользовался двумя:
1) Subclipse – это плагин для Eclipse(http://www.eclipse.org/), т.е. для его использования нужна эта IDE.
2) TortoiseSVN – это более универсальная оболочка. Она встраивается в "Проводник" Windows. При этом к иконкам файлов добавляются значки, отображающие текущее состояние файла, а команды можно выполнять из контекстного меню.
Теперь нужно создать хранилище
Для этого создаем новую папку, например, e:\docs\svn.
И, находясь в этой папке, выполняем команду:
svnadmin create my_project
Эта операция создаст папку "e:\docs\svn\my_project" со служебными файлами хранилища.
Примечание. Если вы используете какой-нибудь клиент, ищите пункт Create Repository.
Перед отправкой файлов в хранилище очень желательно определиться со структурой проекта
Это, наверное, самый сложный этап для новичков (по себе знаю
).
Чтобы не морочить вам голову теорией приведу пару примеров, которые должны подойти для небольших проектов.
Первый пример. Используем две папки:
trunk/ – для размещения законченной (стабильной) версии (ветки) проекта;
branches/ – эта папка будут использоваться для экспериментов, т.е. в ней вы будете создавать папки с экспериментальными версиями проекта. Если вы решите, что какая-нибудь из этих версий должна заменить основную, то просто перенесете ее в trunk.
Второй пример удобно использовать, если нужны две версии проекта, различающиеся только несколькими файлами. Например, вы создаете web сайт, использующий базу данных. Параметры подключения к этой базе на вашем компьютере и на сервере будут отличаться, но не изменять же их каждый раз вручную.
Тут удобно использовать три папки:
trunk/
branches/
trunk_for_server/ - копия папки trunk для сервера (отличаются только файлы с параметрами подключения).
Перед закачкой файлов на сервер вы просто "сливаете" нужные изменения из trunk в trunk_for_server.
Примечание. Оба приведенных примера это только возможные варианты. Вы можете придумать свою структуру.
Переходим к созданию выбранной структуры в хранилище
Для этого создаем временную папку, например, e:\temp, а в ней пустые папки, соответствующие выбранной структуре.
Например, если вы остановились на первом варианте:
e:\temp\trunk \branches
Теперь, находясь в папке "e:", выполняем импорт этих папок в хранилище.
svn import temp file:///e:/docs/svn/my_project -m "Начальный импорт"
Удаляем e:\temp.
В следующей статье я покажу несколько приемов работы с созданным проектом.
Понравилась статья? Подпишитесь на продолжение
!
Опубликовано в Subversion
Комментарии (14)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.
Оставить комментарий







А вот и статейка про SVN, как я посмотрю
Полезно, полезно. А то вот тут у меня товарищ просил про SVN рассказать, а я все ни в какую :))
Если ставить тортилу в качестве клиента, то в установке сервера необходимость отпадает.
У меня иногда возникает необходимость слазить в SVN не со своего компьютера. Есть ли среди клиентов для subversion не требующий установки (чтобы его можно было таскать с собой на флэшке)?
Клиент для командной строки (хм… криво как-то обозвал, но лучше что-то не могу придумать) вроде не требует инсталяции.
Если честно, не знаю. Полный список клиентов находится здесь
Но смысла в нем я особого не вижу. Если нужно что-то просмотреть, достаточно выучить команду checkout, и вводить ее из консоли. Адрес репозитория все равно нужно запоминать (или записывать). А если нужно работать на чужом компьютера, то все-равно придется ставить на него какой-нибудь софт.
В общем, в такой ситуации я бы не стал искать клиент, а просто накидал комманды
svn checkout адрес_репозитория
в текстовый файл (или таблицу Excel) и носил его на флешке.
[...] о программировании « Web разработка. Эффективное управление проектами (Subversion… Как создать свой сайт на PHP? Или зачем нужны [...]
Я правильно понял, что для каждого проекта необходимо создавать свое хранилище?
Не обязательно. Вы можете создать одно хранилище и разместить в нем сколько угодно проектов. Например, в разных папках.
Вопрос в том, будет ли вам удобно пользоваться таким хранилищем.
имеется уже работающий сайт. хочется его залить в svn. как сказать svn не импортировать отдельные директории? например files или cache в которые пользователи дофига чего уже залили и которые нафиг в svn не нужны.
пробывал сначала задать cvn:ignore но оно ругается, что эти директории не версированные…
1) Создать новую папку (mysite)
2) Создать в ней рабочую копию сheckout (если в репозитории файлов нет, то в рабочей копии появится только папка .svn)
3) Скопировать в эту папку (mysite) файлы вашего сайта (включая кэш и все остальное).
4) Теперь можно добавлять (add) нужные файлы и папки в svn
И будет работать svn:ignore
решил вместо SVN попробывать Git. понравилось.
А чем именно понравилось?
Я сам Git не использовал, поэтому интересно ваше мнение (статью в википедии и общую информацию на оф. сайте я, конечно, читал).
Своей простотой инициализации. Достаточно набрать git init в директории с проектом и репозиторий готов. При чем создается только 1 директория (.git) в корне проекта, а не в каждой директории как у SVN. Затем проект можно склонировать (git clone) себе на компьютер и делать с ним что угодно.
Так же все гораздо проще с файлами/директориями которые надо игнорировать. Достаточно создать в корне проекта файл .gitignore, записать в него список файлов(можно с масками)/директорий и добавить этот файл в репозиторий перед добавлением всего проекта. При добавлении проекта эти файлы/директории не будут учитываться и соотвественно не будут вытягиваться при clone.
Правда я еще не разобрался как обойтись без посредника. Т.е. например я сделал у себя на компьютере изменения, залил на сервер, но файлы на сервере остаются неизменными. git pull с самого себя не помогает.
пришлось сделать посредника, на которого я заливаю изменения и с которого сервер затем их вытягивает.