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

При разработке более-менее крупных проектов мы можем столкнуться с рядом трудностей, например:

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

Для решения этих проблем удобно использовать системы контроля версий, например Subversion (SVN).

Обычно VCS состоит из двух частей:

  • Сервер, или репозиторий — где хранятся все исходные коды программы, а также история их изменения.
  • Клиент. Каждый клиент имеет свою локальную копию (working copy) исходных кодов, с которой работает разработчик.

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

В VCS есть две модели, которые позволяют избегать этой проблемы:

  • Блокировка — изменение — разблокировка.
    Согласно этой модели, когда кто-либо начинает работу с файлом, этот файл блокируется, и все остальные пользователи теряют возможность его редактирования.
    Очевидным недостатком такой модели является то, что файлы могут оказаться надолго заблокированными, что приводит к простоям в разработке проекта.
  • Копирование — изменение — слияние.
    В данной модели каждый разработчик свободно редактирует свою локальную копию файлов, после чего выполняется слияние изменений.
    Недостаток этой модели в том, что может возникать необходимость разрешения конфликтов между изменениями файла.

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

Subversion (SVN)

Команды SVN

Перед тем как приступить к использованию SVN, ознакомимся с некоторыми командами, которые может выпонять клиентская часть.

Наиболее часто используемые разработчиками команды:

  • svn update — обновляет содержимое локальной копии до самой последней версии из репозитория.
  • svn commit — отправляет все изменения локальной копии в репозиторий.
  • svn add — включить файл/папку в локальную копию проекта

Нередко также используются команды:

  • svn move — переместить файл/папку1 в папку2
  • svn copy — скопировать файл/папку1 в папку2
  • svn delete — удалить файл/папку из локальной копии проекта

Прочие полезные команды SVN:

  • svn list — просмотр каталога репозитория
  • svn log –verbose — история изменения файла по ревизиям
  • svn cat –revision — отображение содержимого файла из данной ревизии
  • svn diff –revision — отображение изменений файла между двумя ревизиями
  • svn status — отображение изменений в локальной копии относительно репозитория

Жизненный цикл проекта на SVN

0) Добавляем новые файлы на сервер:
1) Получаем локальную копию файлов проекта:

svn checkout svn://. /repo/test project/test
project/test – адрес, где будет располагаться локальная копия.
После выполнения этой команды получим следующую структуру файлов:
project
test
.svn
1.cpp
2.cpp
Makefile

Локальную копию не следует добавлять в ту папку, из которой делали import, так как при совпадении имён файлов они не будут перезаписаны.

2) Изменяем файлы

Допустим, на этом шаге мы хотим сделать какие-нибудь изменения в проекте, а именно:

  • изменить содержимое 1.cpp следующим образом:
    до изменений:
    int main() <
    return 0;
    >

после изменений:
int main() <
printf(" ");
return 0;
>

  • удалить файл 2.cpp
  • Стоит обратить внимание на следующую особенность SVN:
    содержимое файлов проекта можно менять в любых привычных редакторах, но изменения в структуре файлов проекта следует выполнять с помощью соответствующих команд svn (add, copy, move, delete).
    То есть если мы просто удалим файл из папки с локальной копией – это никак не отразится на содержимом репозитория даже после успешного commit’a.

    3) Фиксируем состояние

    При фиксации происходит отправка всех изменений в локальной копии на сервер.

    svn commit -m ". "
    -m ". " — комментарий к commit’у.
    При выполнении этой команды SVN узнаёт нужную ему информацию о проекте из папки .svn

    После каждого commit’а номер ревизии увеличивается на единицу.
    Номер ревизии (Revision) &mdash целое число, показывающее номер состояния проекта.

    Читайте также:  Как понять счастливый билет в автобусе

    Все выполненные действия можно схематически представить на рисунке:

    Разрешение конфликтов

    При работе над проектом возможны такие ситуации:

    Допустим, в какой-то момент времени разработчик обновляется до последней версии проекта и начинает работу над некоторыми файлами.
    Через какое-то время, изменив файлы, он пытается сделать commit. Однако, этот commit не удастся, если другие разработчики уже вносили изменения в те же файлы проекта и сохраняли их в репозитории.
    Такая ситуация называется конфликтом. У разработчика, чей commit не удался из-за конфликтов, есть два возможных варианта действий:

    1. svn revert — отменить все свои изменения
    2. svn update — забрать из репозитория новые версии файлов и, разрешив конфликты, снова попытаться сделать commit.

    Как разрешаются конфликты

    Допустим, в репозитории хранится файл main.cpp ревизии 13:

    int main() <
    fprintf();
    return 0;
    >

    В какой-то момент времени
    user1 и user2
    одновременно делают update:
    svn update svn update
    Оба разработчика
    вносят изменения в main.cpp
    int main() <
    fscanf();
    return 0;
    >
    int main() <
    fpintfpr();
    return 0;
    >
    Затем user2
    commit’ит свои изменения
    svn commit
    commit user1 не удастся,
    так как есть конфликт
    svn commit
    Поэтому ему приходится
    делать update до последней
    версии
    svn update

    Теперь у user1 есть несколько путей разрешения конфликта:

    • убрать чужие изменения, оставив свои
    • не вносить свои изменения, оставив всё как есть
    • вручную соединить все изменения в одном файле

    В последнем случае user1 имеет несколько файлов:
    main.cpp — этот файл уйдёт в репозиторий после разрешений конфликта
    main.cpp.mine — в этом файле хранятся изменения, сделанные user1
    main.cpp.r13 — начальная версия файла без всяких изменений
    main.cpp.r14 — файл, попавший в репозиторий (с изменениями user2)

    После сведения всех изменений в main.cpp user1 пишет
    svn resolved main.cpp (при этом удалятся временные файлы)
    svn commit

    SVN позволяет так же объединить любую версию с любым набором других версий с помощью update и merge .
    Про команду merge можно прочитать, набрав в консоли команду svn help merge .

    Здравствуй, уважаемый читатель блога LifeExample. При разработке любого более-менее крупного проекта невозможно обойтись без системы контроля версиями (SVN). Настройка SVN может загнать в тупик многих начинающих web разработчиков. Я до недавнего времени также пребывал в замешательстве и больших вопросах относительно установки и настройки SVN.

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

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

    Система контроля версий (по англ. Version Control System, сокращенно VCS) состоит из двух частей:

    • Сервер, он же хранилище, он же репозиторий — где хранятся все файлы проекта, а также история их изменения.
    • Клиент — программа для работы с хранилищем, каждый клиент имеет свою локальную копию файлов проекта, с которой работает разработчик.

    VCS предназначена для упрощения совместной разработки проекта, несколькими и более программистами.

    Многие начинающие программисты одиночки при написании кода, создают (backup) копии папок, с программой помечая их текущей датой, или порядковым номером.

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

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

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

    Если вы интересовались вакансиями web разработчиков, то не могли пропустить одного из требований к кандидатам, встречаемое теперь почти в каждом предложении.

    Именно система контроля версий Subversion (SVN) применяется в большинстве организаций, поэтому я и расскажу сегодня о работе и настройке с SVN.

    Настройка сервера (шаг 1)

    Целью статьи является не только познакомить вас с системой контроля версий, но и дать возможность попрактиковаться с её использованием, поэтому сервер я предлагаю разместить локально. Поскольку не у всех есть возможность выделить под него отдельный хостинг.

    Примечание! Разработчики не советую пользоваться локальной версией, в режиме работы команды. Локальная версия подходит только для ведения проекта одним программистом.

    Чтобы самостоятельно настроить SVN server, можно скачать, одну из предлагаемых на официальном сайте , программ с SVN сервером в комплекте, или же ограничиться чистым SVN сервером и скачать Subversion 1.7.

    Читайте также:  Иконка место на карте

    Так, как статья рассчитана на новичков, и предполагает что, вы уважаемые читатели, совершенно не понимаете, как самостоятельно установить и настроить SVN, я покажу вам самый кротчайший путь, от неведения к действиям, с помощью популярной в области систем контроля версий программы TortoiseSVN.

    TortoiseSVN — это бесплатный клиент для системы контроля версий Subversion, выполненный как расширение оболочки Windows. Вся прелесть программы заключается в том, что она не только является клиентом, но и может автоматически в несколько кликов мыши создать локальный SVN сервер, пригодный для работы.

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

    После инсталляции программы, в контекстном меню проводника должны появиться характерные для TortoiseSVN пункты меню.

    Организуем хранилище наших проектов, для этого на диске С: создадим новый каталог с именем SVNrepository , откроем его, и щелкнув правой кнопки мыши, в контекстном меню выбирем TortoiseSVN->"Создать здесь хранилище" .

    Каталог SVNrepository должен заполниться файлами вышеприведенной структуры, после чего можно считать, что мы завершили настройку SVN сервера и готовы к работе.

    Установка клиента (Шаг 2)

    Как это ни странно но, клиентское приложение мы уже установили, и можем благополучно пользоваться им. Запустить его привычным всем методом через кнопку пуск или с ярлыка на рабочем столе – не получится, поскольку оно уже успешно работает.

    При установке инсталер TortoiseSVN создал соответствующие службы, которые теперь будут запускаться автоматически с запуском windows. Благодаря этим службам в контекстном меню проводника стали доступны новые пункты меню.

    Собственно с их помощью, и будет происходить вся последующая работа с системой контроля версий. Такая полезная интеграция клиента SVN, прямо в проводник windows сократит до нуля, время на изучение интерфейса нового клиента, ведь в наше время все привыкли пользоваться мышкой и контекстным меню.

    Настройка структуры хранилища (Шаг 3)

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

    В документации к данной программе разработчики советуют использовать в хранилище три определяющих каталога:

    В каталоге trunk расположим основной проект, над которым будем вести работу.

    Каталог branches будет содержать последующие копии ответвлений проекта, или проще говоря – версий проэкта.

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

    Разработчики в руководстве упоминают о том, что любая организация – каталога, имеет право на существование, и определяется только требованиями конкретного проекта. Именно поэтому, я создам в репозитории (хранилище), всего два каталога.

    В trunk я намерен хранить текущую реализацию проекта, а в branches все разрабатываемые в прошлом и в дальнейшем версии.

    Т.е. формально я представляю себе репозиторий такого вида:

    Из этой структуры следует, что на момент разработки версии v3 в текущий момент успешно выпущена и поддерживается версия v2.

    Чтобы создать каталоги в хранилище, нужно открыть контекстное меню папки SVNrepository и выбрать пункт TortoiseSVN->"Обозреватель хранилища" . Откроется окно для работы с хранилищем.

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

    Попутно добавим в /branches каталог /release v1 , в котором будут храниться версии первой разрабатываемой версии проекта.

    Заметьте при создании или редактировании файлов и каталогов, мы можем оставлять комментарии, для упрощения дальнейшей навигации по хранилищу.

    Основа для работы готова, закончена настройка SVN сервера под конкретный пример, теперь давайте начнем разрабатывать наш тестовый проект.

    Создание рабочей копии (Шаг 4)

    В папку branches/release v1 добавим файл ReadMe.txt нашего, пока не существующего, проекта. Соответственно, нужно изначально подготовить данный файл, и осилить написать туда пару строчек текста, зачем, расскажу позже.

    Перенеся файл в репозитории, мы наконец-то можем возрадоваться началу процесса разработки проекта и контроля его версий. Теперь откройте любой каталог у себя на компьютере, в котором планируете создавать проект. Пусть это будет: C:/Project1 .

    В контекстном меню выберите пункт "SVN извлечь", укажите в качестве URL хранилища, путь до папки с версией v1:

    Подтвердите выбор, нажатием на кнопку "Ок", и наблюдайте ха процессом извлечения, новой рабочей копии из репозитория.

    Обратите внимание, на папке проекта C:/Project1 появилась пиктограмма в виде зеленой галочки. Это означает, что все прошло успешно и рабочая копия полностью синхронизирована с хранилищем.

    Читайте также:  Установить плагин для просмотра видео

    Изменение файлов проекта (Шаг 5)

    Следующим шагом немного изменим, содержимое файла C:Project1ReadMe.txt , можете внести любые изменения, на свое усмотрение.

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

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

    Применение изменений файлов (Шаг 6)

    В контекстном меню папки Project1 выберем пункт "SVN фиксировать", система предложит указать комментарии, перед тем как файлы будут загружены на сервер. Не ленитесь их заполнять, поскольку в последствии, они сыграют вам на руку при необходимости отката версий.

    Кроме того в открывшемся окне, мы можем произвести сравнение файла с предыдущими его версиями. Если вы следовали моим советам, и изменяли строки ReadMe.txt , то сможете оценить прелесть работы встроенной в TortoiseSVN программы для стравнения текстовых файлов. Для этого выберите в контекстном меню, пункт "Cравнить с базой".

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

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

    Откат к предыдущей версии (Шаг 7)

    Если спустя некоторое время, стало ясно, что все идет не так, и мы хотим вернуть файлу прежний вид, сделать это можно удобным способом. В контекстном меню файла C:Project1ReadMe.txt выберем пункт "Обновить до ревизии"

    Заметьте что по умолчанию, система SVN предлагает обновиться до HEAD ревизии, т.е. до последней, но мы можем указать номер ревизии, к которой нужно откатить файл. Если номер не известен, можно использовать Журнал ревизий, и отметить именно ту версию, которая нас больше всего устраивает. Подтвердив выбор кнопкой "ОК&quot, файл будет заменен более ранней версией.

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

    Читайте также похожие статьи:

    Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

    Данный цикл статей посвящен введению в использование SVN, с точки зрения обычного пользователя. Статья была написана в помощь моим коллегам для быстрого освоения и использования SVN. Итак начнем с азов.

    Введение

    Subversion (SVN) — бесплатная система управления версиями с открытым исходным кодом. SVN позволяет управлять файлами и каталогами, а так же сделанными в них изменениями во времени. SVN предоставляет следующие возможности :

    1. Контроль изменений каталогов. SVN использует «виртуальную» файловую систему с возможностями управления версиями, которая способна отслеживать изменения во времени целых структур каталогов
    2. Настоящая история версий. SVN делает возможным добавление, удаление, копирование и переименование как файлов, так и каталогов. При этом каждый вновь добавленный файл начинает жизнь с чистого листа, сохраняя собственную историю изменений
    3. Атомарная фиксация изменений. Каждый набор изменений либо попадает в хранилище целиком, либо не попадает туда вовсе. Т.е. если при фиксации изменений проекта произошла ошибка при обработке файла, то изменения всего проекта не будут зафиксированы
    4. Метаданные с версиями. Каждый файл и каталог имеет собственный набор свойств, представленных в виде названия и значения. Вы можете создавать и сохранять любые необходимые пары названий свойств и их значений. Свойства файлов точно так же находятся под управлением версиями, как их содержимое
    5. Единый способ работы с данными. SVN обнаруживает различия между файлами с помощью специального бинарного алгоритма, который одинаково работает как с текстовыми, так и с бинарными файлами. Файлы записываются в хранилище в сжатом виде независимо от их типа, а различия между отдельными версиями могут передаваться по сети в обоих направлениях
    6. Эффективные ветки и метки. SVN создаёт ветки и метки путём простого копирования проекта, используя механизм, похожий на жёсткие ссылки в файловых системах. Благодаря этому, операции по созданию веток и меток занимают немного времени.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Adblock detector