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

Владимир | | Subversion.

Картинка для 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.

В следующей статье я покажу несколько приемов работы с созданным проектом.

Интересное

Панорамные лифты otis удобное средство передвижения и украшение современного здания.

  • А вот и статейка про SVN, как я посмотрю 🙂
    Полезно, полезно. А то вот тут у меня товарищ просил про SVN рассказать, а я все ни в какую :))

  • А вот и статейка про SVN, как я посмотрю 🙂
    Полезно, полезно. А то вот тут у меня товарищ просил про SVN рассказать, а я все ни в какую :))

  • Если ставить тортилу в качестве клиента, то в установке сервера необходимость отпадает.

  • Если ставить тортилу в качестве клиента, то в установке сервера необходимость отпадает.

  • Михась

    У меня иногда возникает необходимость слазить в SVN не со своего компьютера. Есть ли среди клиентов для subversion не требующий установки (чтобы его можно было таскать с собой на флэшке)?

    • Клиент для командной строки (хм… криво как-то обозвал, но лучше что-то не могу придумать) вроде не требует инсталяции.

    • Если честно, не знаю. Полный список клиентов находится здесь

      Но смысла в нем я особого не вижу. Если нужно что-то просмотреть, достаточно выучить команду checkout, и вводить ее из консоли. Адрес репозитория все равно нужно запоминать (или записывать). А если нужно работать на чужом компьютера, то все-равно придется ставить на него какой-нибудь софт.

      В общем, в такой ситуации я бы не стал искать клиент, а просто накидал комманды
      svn checkout адрес_репозитория
      в текстовый файл (или таблицу Excel) и носил его на флешке.

  • Михась

    У меня иногда возникает необходимость слазить в SVN не со своего компьютера. Есть ли среди клиентов для subversion не требующий установки (чтобы его можно было таскать с собой на флэшке)?

    • Клиент для командной строки (хм… криво как-то обозвал, но лучше что-то не могу придумать) вроде не требует инсталяции.

    • Если честно, не знаю. Полный список клиентов находится здесь

      Но смысла в нем я особого не вижу. Если нужно что-то просмотреть, достаточно выучить команду checkout, и вводить ее из консоли. Адрес репозитория все равно нужно запоминать (или записывать). А если нужно работать на чужом компьютера, то все-равно придется ставить на него какой-нибудь софт.

      В общем, в такой ситуации я бы не стал искать клиент, а просто накидал комманды
      svn checkout адрес_репозитория
      в текстовый файл (или таблицу Excel) и носил его на флешке.

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

  • AZ

    Я правильно понял, что для каждого проекта необходимо создавать свое хранилище?

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

  • AZ

    Я правильно понял, что для каждого проекта необходимо создавать свое хранилище?

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

  • Denis

    имеется уже работающий сайт. хочется его залить в svn. как сказать svn не импортировать отдельные директории? например files или cache в которые пользователи дофига чего уже залили и которые нафиг в svn не нужны.
    пробывал сначала задать cvn:ignore но оно ругается, что эти директории не версированные…

    • 1) Создать новую папку (mysite)
      2) Создать в ней рабочую копию сheckout (если в репозитории файлов нет, то в рабочей копии появится только папка .svn)
      3) Скопировать в эту папку (mysite) файлы вашего сайта (включая кэш и все остальное).
      4) Теперь можно добавлять (add) нужные файлы и папки в svn

    • И будет работать svn:ignore

  • Denis

    имеется уже работающий сайт. хочется его залить в svn. как сказать svn не импортировать отдельные директории? например files или cache в которые пользователи дофига чего уже залили и которые нафиг в svn не нужны.
    пробывал сначала задать cvn:ignore но оно ругается, что эти директории не версированные…

    • 1) Создать новую папку (mysite)
      2) Создать в ней рабочую копию сheckout (если в репозитории файлов нет, то в рабочей копии появится только папка .svn)
      3) Скопировать в эту папку (mysite) файлы вашего сайта (включая кэш и все остальное).
      4) Теперь можно добавлять (add) нужные файлы и папки в svn

    • И будет работать svn:ignore

  • Denis

    решил вместо SVN попробывать Git. понравилось.

    • А чем именно понравилось?
      Я сам Git не использовал, поэтому интересно ваше мнение (статью в википедии и общую информацию на оф. сайте я, конечно, читал).

  • Denis

    решил вместо SVN попробывать Git. понравилось.

    • А чем именно понравилось?
      Я сам Git не использовал, поэтому интересно ваше мнение (статью в википедии и общую информацию на оф. сайте я, конечно, читал).

  • Denis

    Своей простотой инициализации. Достаточно набрать git init в директории с проектом и репозиторий готов. При чем создается только 1 директория (.git) в корне проекта, а не в каждой директории как у SVN. Затем проект можно склонировать (git clone) себе на компьютер и делать с ним что угодно.
    Так же все гораздо проще с файлами/директориями которые надо игнорировать. Достаточно создать в корне проекта файл .gitignore, записать в него список файлов(можно с масками)/директорий и добавить этот файл в репозиторий перед добавлением всего проекта. При добавлении проекта эти файлы/директории не будут учитываться и соотвественно не будут вытягиваться при clone.
    Правда я еще не разобрался как обойтись без посредника. Т.е. например я сделал у себя на компьютере изменения, залил на сервер, но файлы на сервере остаются неизменными. git pull с самого себя не помогает.
    пришлось сделать посредника, на которого я заливаю изменения и с которого сервер затем их вытягивает.

  • Denis

    Своей простотой инициализации. Достаточно набрать git init в директории с проектом и репозиторий готов. При чем создается только 1 директория (.git) в корне проекта, а не в каждой директории как у SVN. Затем проект можно склонировать (git clone) себе на компьютер и делать с ним что угодно.
    Так же все гораздо проще с файлами/директориями которые надо игнорировать. Достаточно создать в корне проекта файл .gitignore, записать в него список файлов(можно с масками)/директорий и добавить этот файл в репозиторий перед добавлением всего проекта. При добавлении проекта эти файлы/директории не будут учитываться и соотвественно не будут вытягиваться при clone.
    Правда я еще не разобрался как обойтись без посредника. Т.е. например я сделал у себя на компьютере изменения, залил на сервер, но файлы на сервере остаются неизменными. git pull с самого себя не помогает.
    пришлось сделать посредника, на которого я заливаю изменения и с которого сервер затем их вытягивает.

  • Для контроля версий выбрал Subversion, в репозитории создал директорию для проекта, а в ней две поддиректории: trunk и branches, файлы блога на WordPress разместил в поддиректории trunk. Но после импорта проекта в Eclipse из SVN и запуска сайта на XAMPP для тестирования, главная страница отображается нормально, а при переходе по ссылкам появляется ошибка 404. Подскажите, пожалуйста, в чем может быть причина?

    • Какой URL у главной страницы? Включает ли он подпапку или нет?
      site.domen/
      или
      site.domen/blog/
      Если второй вариант, проверяйте .htaccess

      ЧПУ используются или нет?
      Как выглядит ссылка на внутреннюю страницу?
      Так
      site.domen/my-post.html
      или
      site.domen/index.php?p=123
      Попробуйте отключить ЧПУ (Permalink).

  • Для контроля версий выбрал Subversion, в репозитории создал директорию для проекта, а в ней две поддиректории: trunk и branches, файлы блога на WordPress разместил в поддиректории trunk. Но после импорта проекта в Eclipse из SVN и запуска сайта на XAMPP для тестирования, главная страница отображается нормально, а при переходе по ссылкам появляется ошибка 404. Подскажите, пожалуйста, в чем может быть причина?

    • Какой URL у главной страницы? Включает ли он подпапку или нет?
      site.domen/
      или
      site.domen/blog/
      Если второй вариант, проверяйте .htaccess

      ЧПУ используются или нет?
      Как выглядит ссылка на внутреннюю страницу?
      Так
      site.domen/my-post.html
      или
      site.domen/index.php?p=123
      Попробуйте отключить ЧПУ (Permalink).

  • только начал разбираться с Subversion. заставила необходимость делать копии сайтов и контролировать версии, но никак не мог сам толку дойти. пусть и статья старая, но надеюсь, что все же довольно актуальна (лучше, чем читать доки на английском!). кажись, она сейчас интегрирована нетбинс, но у меня что-то не работает (версии файлов я найти могу, но не могу понять, где они хранятся! 🙂 ).