Системы контроля версий (их ещё называют системами управления версиями) – один из инструментов, который использует в своей работе любой программист от первокурсника до опытного тим-лида с сотнями успешных проектов.
— Ссылки на примеры кода в репозиториях помещают в своё портфолио.
— Большие проекты с открытым программным кодом получают тысячи улучшений, благодаря размещению на специализированном хостинге.
— От 30 до 70% кода, использованного в программном продукте, профессиональные разработчики могут скопировать с проектов, представленных в открытых репозиториях.
Незаменимы системы контроля версий в командной разработке, где синхронизация процесса играет важную роль.
Но даже если Вы принципиально не работаете в команде, система контроля версий может помочь Вам справиться со многими сложными ситуациями.
С необходимостью отката программы к предыдущей версии рано или поздно сталкивается любой программист.
В точке А программа отлично работает, а попытка расширить функционал, ввести дополнительные переменные, классы и пр. приводит в появлению ошибки.
Распознать ошибку удаётся не всегда. Поэтому многие программисты предпочитают «пройти перезагрузку» — откатиться к стабильной рабочей версии и переписать дополнения заново, построчно анализируя весь добавленный код.
Реализовать такую процедуру помогает использование системы контроля версий (СКВ), которое позволяет четко отследить историю разработки, найти стабильную версию и продолжить работу.
В системе контроля версий может содержаться, как программный код, так и любая другая информация (включая текстовые файлы, изображения и т.п.)
Как осуществляется контроль версий
Существует несколько моделей хранения данных:
Примитивная модель хранения версий
В примитивной модели актуальные копии проекта перезаписываются в отдельную директорию через определённый промежуток времени.
Достоинства:
— возможность восстановления данных одной из записанных версий.
Недостатки:
— сложности с поиском необходимой версии в обширной и плохо структурированной базе данных;
— возможность потери данных вследствие возникновения физических поломок оборудования;
— отсутствие возможности совместной разработки.
Локальные системы контроля версий
Локальные СКВ обычно хранят на компьютере список изменений, внесенных в файлы. Основываясь на этих данных, система контроля версий воссоздает нужную версию файла (актуальную на определенный момент времени).
Достоинства:
— возможность восстановления данных из определенной версии (точно определяется по времени записи);
— высокая скорость выполнения восстановления (база данных четко структурирована, поэтому сложностей при поиске не возникает, сетевая задержка отсутствует, поскольку данные хранятся непосредственно на рабочем компьютере).
Недостатки:
— возможность потери данных вследствие возникновения физических поломок оборудования;
— отсутствие возможности совместной разработки.
Централизованные системы контроля версий
Централизованные системы контроля версий предполагают сохранение версий проектов на общий сервер, с которого потом получают нужные версии клиенты.
Достоинства:
— возможность восстановления данных из определенной версии (точно определяется по времени записи);
— возможность ведения командной разработки проекта;
Недостатки:
— отсутствие доступа к данным при сбое работы сервера;
— довольно низкая скорость работы (из-за возникновения сетевых задержек).
Децентрализованные системы контроля версий
В децентрализованных системах контроля версий при каждом копировании удалённого репозитория (расположенного на сервере) происходит полное копирование данных в локальный репозиторий (установленный на рабочем компьютере). Каждая копия содержит все данные, хранящиеся в удалённом репозитории. В случае, возникновения технической неисправности на стороне сервера, удаленный репозиторий можно перезаписать с любой сохраненной копии.
Достоинства:
— возможность восстановления данных из определенной версии (точно определяется по времени записи);
— возможность ведения командной разработки проекта;
— при сбое работы сервера система сохраняет данные в локальном репозитории, что позволяет эффективно вести процесс разработки, а после восстановления работы сервера, передать все изменения в удаленный репозиторий;
— при физической поломке сервера данные можно легко перенести в новый удалённый репозиторий с любого локального репозитория;
— высокая скорость работы (в ходе работы данные записываются и получаются из локального репозитория, поэтому сетевые задержки отсутствуют).
Современные системы контроля версий
Существует много систем контроля версий (Git, Darcs, Mercurial, Bazaar, Monotone и т.д), сходных по принципу работы и конечным задачам. Отличаются они друг от друга архитектурой, использованными решениями и удобством работы.
Самая популярная на сегодняшний день система контроля версий – 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, и пусть ваши данные всегда будут под надежной защитой.
Ищу решение локального сервера GIT на рабочем ПК с Windows 10.
где минусы децентрализации??????