Контроль версий VCS

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

Что такое контроль версий, и зачем он вам нужен?

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

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

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

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

Так вот используя VCS вам не придется никого бить по бубну не рвать волосы на голове, а всего лишь выделить 5 минут времени что бы вернуть прежнюю версию ода используя VCS.

Начало работы с проектом

Первым действием, которое должен выполнить разработчик, является извлечение рабочей копии проекта или той его части, с которой предстоит работать. Это действие выполняется с помощью стандартной команды извлечения версии (checkout или clone) либо специальной команды, фактически выполняющей то же самое действие.

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

По команде извлечения устанавливается соединение с сервером и проект (или его часть — один из каталогов с подкаталогами) в виде дерева каталогов и файлов копируется на компьютер разработчика.

Обычной практикой является дублирование рабочей копии: помимо основного каталога с проектом на локальный диск (либо в отдельный, специально выбранный каталог, либо в системные подкаталоги основного дерева проекта) дополнительно записывается ещё одна его копия.Работая с проектом, разработчик изменяет только файлы основной рабочей копии.

Вторая локальная копия хранится в качестве эталона, позволяя в любой момент без обращения к серверу определить, какие изменения внесены в конкретный файл или проект в целом и от какой версии была «отпочкована» рабочая копия; как правило, любая попытка ручного изменения этой копии приводит к ошибкам в работе программного обеспечения VCS.

Возможности VCS

1) Ветвление

Что же предоставляет нам ветвление?

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

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

Рассмотри графический пример ветвления:

на этом изображение вы можете видеть весь процесс ветвления в VCS:

Mainline — это процесс жизни проекта, основная ветка;

branch — это ветка, которая была начата на выходе линии branch c Mainline и в точке входа обратно в Mainline это merge;

merge — мы рассмотрим ниже.

2) Слияние версий (merge)

Три вида операций, выполняемых в системе управления версиями, могут приводить к необходимости объединения изменений. Это:

• Обновление рабочей копии (изменения, сделанные в основной версии, сливаются с локальными).

• Фиксация изменений (локальные изменения сливаются с изменениями, уже зафиксированными в основной версии).

• Слияние ветвей (изменения, сделанные в одной ветви разработки, сливаются с изменениями, сделанными в другой).

Ниже вы можете наблюдать пример слияния(merge) c одной ветви в другую.

3) Конфликты и их разрешение

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

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

Для решения конфликта разработчик должен решить какая с версий файла есть правильной и осуществить слияние в ручную.

Какие VCS существуют?

На данный момент я знаю только 3 самых популярных VCS:

1) Git — самый популярный и многофункциональный.

2) Subversion — не менее популярный, но немного уступает git-у.

3) Mercurial — отдал ему 3-е почетное место так как особо тесно с ним не работал, но не буду спорить если он круче git-а.

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

P.S. Кто знает еще какие то неплохие VCS то предлагаем их на рассмотрение в комментариях :)

Урок создан: 16 апреля 2013 | Просмотров: 9683 | Автор: Александр Барчук | Правила перепечатки


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

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

Ваш e-mail не будет опубликован.

Комментарии:

  • 16 апреля 2013 в 17:33

    paralainer

    1) не mearge, а merge
    2) Сравнивать git c subversion немного не корректно, тем более по функциональности. Лучше рассказать чем отличаются централизованные и децентрализованые системы контроля версий.

    • 16 апреля 2013 в 18:08

      Александр Барчук

      Спасибо за исправление.. Опечатался.
      Я пытался в данной статье просто ознакомить человека что такое VCS детально опишу отличия git и subversion в следующем посте.

  • 16 мая 2013 в 08:43

    Roman Zhuravskiy

    по популярности наверно идёт так:
    1)git
    2)mercurial
    3)subversion

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

  • 15 июля 2014 в 16:24

    maks1m

    Как раз сейчас учу про гит пот по этому мануалу http://git-scm.com/book/ru/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5

  • 15 июля 2014 в 16:25

    maks1m

    А чего вы не прикрутите disqus для комментариев?