Системы контроля версий – основа командной разработки

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

– Ссылки на примеры кода в репозиториях помещают в своё портфолио.

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

– От 30 до 70% кода, использованного в программном продукте, профессиональные разработчики могут скопировать с проектов, представленных в открытых репозиториях.

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

Командная разработка

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

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

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

Распознать ошибку удаётся не всегда. Поэтому многие программисты предпочитают «пройти перезагрузку» – откатиться к стабильной рабочей версии и переписать дополнения заново, построчно анализируя весь добавленный код.

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

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

Как осуществляется контроль версий

Существует несколько моделей хранения данных:

Примитивная модель хранения версий

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

Достоинства:

– возможность восстановления данных одной из записанных версий.

Недостатки:

– сложности с поиском необходимой версии в обширной и плохо структурированной базе данных;

– возможность потери данных вследствие возникновения физических поломок оборудования;

– отсутствие возможности совместной разработки.

Локальные системы контроля версий

Локальные  СКВ обычно хранят на компьютере список изменений, внесенных в файлы. Основываясь на этих данных, система контроля версий воссоздает нужную версию файла (актуальную на определенный момент времени).

Локальная система контроля версий
Локальные системы контроля версий

 

Достоинства:

– возможность восстановления данных  из определенной версии (точно определяется по времени записи);

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

Недостатки:

– возможность потери данных вследствие возникновения физических поломок оборудования;

– отсутствие возможности совместной разработки.

Централизованные системы контроля версий

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

Централизованная система контроля версий
Централизованные системы контроля версий

Достоинства:

– возможность восстановления данных  из определенной версии (точно определяется по времени записи);

– возможность ведения командной разработки проекта;

Недостатки:

–  отсутствие доступа к данным при сбое работы сервера;

– довольно низкая скорость работы (из-за возникновения сетевых задержек).

Децентрализованные системы контроля версий

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

Распределённая система контроля версий
Децентрализованные системы контроля версий

Достоинства:

– возможность восстановления данных  из определенной версии (точно определяется по времени записи);

– возможность ведения командной разработки проекта;

– при сбое работы сервера система сохраняет данные в локальном репозитории, что позволяет эффективно вести процесс разработки, а после восстановления работы сервера, передать все изменения в удаленный репозиторий;

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

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

Современные системы контроля версий

Существует много систем контроля версий (Git, Darcs, Mercurial, Bazaar, Monotone и т.д), сходных по принципу работы и конечным задачам. Отличаются они друг от друга архитектурой, использованными решениями и удобством работы.

Самая популярная на сегодняшний день система контроля версий – Git.

Git

 

Система контроля версий git
Git

 

Умение работать с git’ом – обязательный навык для программиста любого профиля. Можно долго обсуждать преимущества и недостатки разных систем контроля версий, но большинство компаний используют git, поэтому уметь работать с  git’ом нужно всем.

Git – распределённая система контроля версий. Что даёт ей все преимущества децентрализованной СКВ:

– высокую скорость проведения всех операций (за счет отсутствия сетевой задержки);

– идеальные условия для командной разработки;

– страховку от потери информации при возникновении проблем с центральным сервером.

Для контроля версий в git используются 2 репозитория: локальный и удаленный. Локальный репозиторий (полноценный репозиторий, а не ссылки или копии отдельных ветвей) находится на компьютере разработчика, а удаленный на удалённом сервере. Доступ к удаленному репозиторию обеспечивается  благодаря гит-хостингу Github, Google Code, GitLab и т.д.

Как работает git

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

Команда push копирует новые данные, содержащиеся в локальном репозитории, в удалённый репозиторий, а команда pull передает данные из удаленного репозитория в локальный.

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

Дерево проекта

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

В репозитории содержится «дерево» проекта, то есть все сохраненные версии файлов.

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

К появлению «веток» приводит работа с более ранними версиями и сохранение внесённых изменений.

На различных ветках дерева  содержатся сохранения, основой которых был один исходный файл. В ходе работы в файлы на разных ветках были внесены разные изменения. В системе управления версиями можно работать со всеми ветками дерева проекта, пошагово, изменяя и дополняя содержащиеся в них данные. После проведения ряда изменений 2 ветки могут «срастись», в новой версии файла будут учтены все внесенные изменения.

Git-хостинг

Для комфортной работы с git нужно зарегистрироваться на любом git-хостинге. Их довольно много: Github, Sourceforge, Google Code,  GitLab, Codebase и т.д.

Самый популярный на данный момент git-хостинг  – это Github.

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

Git-клиент

Для удобства работы с системой контроля версий git разработан целый ряд графических git-клиентов. Это программы, позволяющие эффективно работать с системой контроля версий, используя графический интерфейс.

Многие IDE предполагают возможность работы с git.

Работа с Git через IDE
Работа с Git через IDE

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

Осваивайте git, и пусть ваши данные всегда будут под надежной защитой.

//To be continued…

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.