В этой статье пойдет речь о Subversion (SVN). Статья ориентирована на людей, которые либо впервые услышали об этом, либо слышали часто, но толком не представляют что же это такое и какие преимущества оно дает. Одним словом для новичков.
Итак, как вы могли бы прочитать в wikipedia, Subversion - это свободная централизованная система управления версиями. Subversion часто называют «SVN», по названию клиентской программы.
А теперь человеческим языком.
Subversion - это такое приложение, которое позволяет:

  • Хранить столько копий кода разрабатываемой программы, сколько было изменений
  • Вернуться к любой из сохраненных копий кода вашей программы в любой момент
  • Без проблем одновременно работать над одним файлом нескольким разработчикам
  • Сравнивать разные копии кода вашего приложения
  • Развивать несколько веток кода продукта одновременно
  • Легко и быстро копировать изменения из одной ветки в другую
  • Просматривать кто из разработчиков какую строку файла менял

Правда здесь приведены не все возможности, а только те которые позволят новичку начать понимать суть.
Теперь о том как это работает. Чтобы полноценно и комфортно работать нужно 2 вещи.

  1. Центральный репозиторий на сервере, где установлен Subversion
  2. SVN-клиент у каждого из разработчиков

Как настроить первое было рассказано в статье Создание и настройка SVN-репозитория в Linux. В результате такой операции мы получаем хранилище нашего кода с настроенным доступом к нему.
Теперь поговорим о второй части. Для Linux очень удобным SVN-клиентом является subclipse (Можно сказать что это полный Linux-аналог TortoiseSVN). Это plugin для eclipse, который добавляет этой IDE функции работы с Subversion. Давайте рассмотрим для начала установку subclipse. Этот процесс будет показан на скринах. Так будет нагляднее. Внизу под каждым изображением будет появляться надпись, которая поясняет каждый шаг. Так же внизу есть стрелки для перехода к следующему и предыдущему шагам. Итак, кликните по первой миниатюре и откроется увеличенное изображение. Загрузка изображения может занять некоторое время (зависит от скорости вашего интернета).

Установка subclipse и Checkout

Выбираем установку дополнений в главном меню Eclipse. Не обращайте внимание на код index.php - этот файл eclipse запомнил с прошлого запуска Выбираем в диалоговом окне установку новых возможностей, а не обновление С официального сайта subclipse берем адрес самой свежей версии и вставляем в поле ввода. Задаем так же  название Убеждаемся, что стоит галочка на subclipse Убираем MyIyn, если eclipse будет сообщать об отсутствии зависимостей Соглашаемся с текстом лицензии
Ждем пока произойдет загрузка После загрузки подтверждаем установку кнопкой Install All Соглашаемся на перезагрузку eclipse. Жмем Yes
После перезагрузки eclipse убедимся, что установка прошла успешно. Выберем вид (perspective) для работы с subclipse Выбираем вид, который выбран здесь Теперь через контекстное меню можем добавить URL нового хранилища Вводим URL главного хранилища для того, чтобы сделать checkout Вводим пароль и имя

Теперь познакомимся с основными действиями, которые вам надо будет делать каждый день при работе с с SVN. Список основных действий следует далее.

  • Checkout - получение локальной рабочей копии файлов, имеющихся на сервере
  • Commit - сохранение, внесенных вами изменений
  • Update - обновление файлов вашей рабочей копии до версий имеющихся на сервере
  • ShowHistory - просмотр списка изменений для файла или группы файлов
  • Compare - визуальное сравнение двух версий одного файла

Подчеркну, что это только базовые возможности Subversion. А так возможностей куда как больше.
Давайте чуть подробнее рассмотрим каждую из перечисленных возможностей.
Checkout. Первым делом чтобы начать работу с некоторым кодом вам необходимо получить локальную копию кода на вашу машину из центрального хранилища (репозитория). Далее изменения вы будете вносить именно в вашу рабочую копию. Все остальные перечисленные действия (кроме может быть Compare) делаются только при наличии CheckOut.
Commit. Когда вы изменили код (добавили какую-нибудь возможность или исправили ошибку), вы можете сохранить свои изменения в центральный репозиторий и ваши изменения станут доступны так же другим участникам команды. Очень важно делать комментарий к изменениям в диалоговом окне subclipse (или другого вашего клиента). Эти комментарии будут храниться в истории версий. По комментариям другой член команды должен легко понять для чего делались эти изменения.
Update. Другие члены команды делают Update для своей локальной копии и получают ваши изменения. При этом если вы работали в одном файле, то ваши изменения и изменения того члена команды, который делал их до того как решил сделать Update будут объединены (merge). Это очень удобно. Однако это так лишь если вы изменяли разные строки (например исправляли разные функции или просто проблемы находящиеся на разных строках). Если же вы в некоторых местах меняли одинаковые строки, то вы получите ситуацию “Конфликт версий”. Это означает, что вам будет предложено визуально сравнить две версии файла, исправить вручную код в местах конфликта и пометить конфликт как “разрешенный” (исправленный). При визуальном сравнении ваш клиент (subclipse в данном случае) выделит места конфликта цветом. Так что вам легко будет разрешить конфликт.
ShowHistory. Для любого файла или группы файлов (объединенной каталогом) вы можете посмотреть историю изменений. Вы можете для каждой версии видеть комментарий, который был оставлен при операции Commit. Вы можете посмотреть какие файлы еще участвовали в любом Commit’е.
Compare. Так же как и при разрешении конфликта вы можете с помощью этой функции сравнивать визуально две версии одного файла (или просто два файла). При этом цветом будут выделены места, которые отличаются.
Теперь вы можете так же посмотреть все эти операции на скринах. Кликайте по первому, чтобы открыть увеличенную копию изображения. Пояснения к каждому скрину по прежнему находятся внизу.
Мы рассмотрели как делается Checkout выше вместе с установкой subclipse (последние несколько скринов).
Теперь давайте рассмотрим как начать работу с кодом. Нам следует создать проект. Просматривать такие скрины вы уже умеете.

Создание проекта

В контекстном меню Project Explorer выбираем создание нового проекта В диалоге шаблона проекта выбираем Checkout projects from SVN В диалоге выбора репозитория выбираем тот, что создали на предыдущем этапе (после установки subclipse) С помощью данного диалога выбирается метод chekout и последняя ревизия, которая определяет версию кода (HEAD - самая свежая ревизия) Отвечаем согласием (Yes) в диалоге, который предупреждает, что мы делаем checkout всего репозитория, со всеми branch и tag-ветками. Так как у нас только одна ветка, то нам это не важно Теперь в Project Explorer вы видите файлы, полученые из хранилища. Возле каждого стоит номер последней ревизии и login того, кто редактировал

Теперь рассмотрим две наиболее часто применяемые операции. Это Commit и Update.

Commit

Файле проекта wp-signup.php отмечен красным крестиком. Это означает, что файл содержит невалидный html-код. Исправим это. После изменений данный файл отмечен звездочкой. Сделаем для него операцию commit. Если вы изменили несколько файлов вы можете сделать commit сразу нескольких. В этом окне вы можете задать комментарий и убрать некоторые файлы из данного commit, если их логичнее будет отправить с другими изменениями. Теперь вы видите, что звездочка исчезла, а в SVN-консоле появился log. Этой ревизии присвоен номер 3.

Update

Этот экземпляр eclipse открыт другим пользователем. Он ничего не знает о том какие изменения были сделаны первым пользователем и хочет получить новые версии файлов. Копия файлов для второго пользователя обновлена. В консоли SVN мы можем видеть, что он получил изменения третьей ревизии.

Вот мы и рассмотрели бегло основные особенности Subversion и более детально наиболее часто используемые. Есть еще такие замечательные вещи как создание и работа с ветками (branch, tag) и копирование изменений из одной версии в другую (merge). Об этом я могу рассказать в других статьях. Мне будут интересны ваши отзывы, потому что по ним можно понять о чем бы вы хотели прочитать на страницах блога и помогло ли вам то, что вы прочитали.

Tags: ,

6 Responses to “Subversion. SVN-клиент в Eclipse”

  1.  Jman Says:

    Для Linux очень удобным SVN-клиентом является subclipse

    А для Windows он не подходит?
    ЗЫ Капча - зло

  2.  Игорь Тельменко Says:

    Subclipse - это расширение к eclipse. Подходит и для Windows :)

  3.  Jman Says:

    Да я знаю, просто написано так, будто в Linux больше нет других SVN клиентов. и Subclipse это linux-альтернатива.
    Можно сказать что это полный Linux-аналог TortoiseSVN

  4.  Игорь Тельменко Says:

    Есть и другие. Просто Subclipse по функциям повторяет TortoiseSVN и похоже разрабатывается одним и тем же коллективом.. Многие считают, что TortoiseSVN это лучший SVN-клиент для Windows. Те кто хотят того же удобства и в Linux могут получить все это с данным plugin для Eclipse.
    У блога уклон на Linux. Поэтому про инструменты Windows часто либо не говорится либо говорится во вторую очередь.

  5.  Евгений Says:

    Расскажи как в Eclipse с ветками работать: создавать, сливать. Ковыряюсь уже давно, а разобраться не могу

  6.  Игорь Тельменко Says:

    В принципе точно так же как в TortoiseSVN. Там аналогичные пункты меню есть.