Что такое Git#
Наибольшей ценностью в любом IT-предприятии обладает команда, в которой сосредоточены компетенции, знания и опыт. Следующая ценность – это исходный код. Исходный код подобен драгоценности, которую команда наращивает и оттачивает. Задачу хранить код и управлять его состоянием берет на себя Git.
Git – это распределенная система контроля версий. Рассмотрим каждое из этих слов подробнее.
Слово “система” в определении говорит, что Git шире, чем просто набор программных инструментов. Она представляет совокупность инструментов, теории и рекомендаций. Они вместе позволяют организовать эффективный рабочий процесс в не зависимости от размера команды, удаленности участников, активности работы.
Note
Под Git будем подразумевать систему и употреблять это англоязычное существительное в женском роде.
Слово “версия” указывает на состояние проекта в конкретный момент времени. Современный проект может быть выполнен только совместной работой в команде. Пословица “один в поле не воин” актуальна как никогда. Проект может быть представлен в виде набора электронных документов – исходных кодов, инструкций, документаций, чертежей, описаний моделей и т.д. Работа над проектом означает последовательное наполнение этих документов полезным и согласованным содержимым. В каждой итерации исполнитель вносит в документы изменения, создавая их обновленный вариант, называемый также версией.
Для слова “контроль” более актуальным был бы синоним “управление”. Оно обозначает набор действий, применяемых к прошлым и текущим версиям документов. По ходу работы над проектом электронные документы развиваются, образуя упорядоченное множество своих версий. Несомненно, наибольшую ценность представляет последняя версия документа. Но не стоит забывать и об истории, в которой запечатлено прошлое. Прошлое в динамике может дать больше, чем застывшее текущее, если уметь видеть и анализировать. Применительно к настоящим версиям документов, под контролем понимают действия по их обновлению. Эти обновления могут быть нетривиальными, если над документом одновременно работают несколько человек. Контроль выражается в том, что любой участник команды может:
получить всю информацию об истории изменений файлов проекта;
с минимальными издержками получить результаты работы других и поделиться своими результатами с другими участниками.
Слово “распределенный” указывает на то, что система в своем функционировании самодостаточна и ее функционирование не зависит от доступности внешних ресурсов. Внешний ресурс может быть необходим только для обмена результатами работы, но не для продолжения работы.
Что дает Git? Если кратко, то историю изменений файлов в проекте с сохранностью данных, возможность работать над проектом изолированно и в команде.
Как система контроля версий, она сохраняет состояния контролируемых файлов, с описанием того кто, когда, что и почему изменил. Это не дает потеряться полезному содержимому, даже если оно впоследствии было удалено. Любой участник команды может изучить состояние файлов за любое время существования проекта и узнать, кто и почему их изменил, добавил или удалил. Такая функция дает возможность взглянуть на прошлое и восстановить историю работы над проектом. Это отличная возможность быстро войти в новый и незнакомый проект и быть в курсе дел.
Как распределенная система контроля версий, Git позволяет работать участникам изолированно друг от друга. Все, что нужно для работы с проектом, располагается на машине пользователя. Большинство ее команд работают без доступа в интернет.
Как система, разработанная для больших проектов как ядро Linux, Git позволяет масштабировать процессы разработки до тысяч и более участников. При этом она не теряет своих преимуществ и для небольших команд. Когда говорят о команде, то подразумевают коллектив, работающий под управлением одного руководителя. Git расширяет понятие командной работы до сотрудничества независимых команд каждый со своим лидером. И это лежит в основе развития идеологии свободного и открытого ПО.
В основе преимуществ Git лежит концепция веток c их автоматическим слиянием и ее удачная техническая реализация. Ветки представляют собой альтернативное развитие проекта (его альтернативные версии), выполненные участником команды, а слияние веток – это процесс объединения разных версий проекта в одну версию.
Чтобы получить целостное понимание Git, нам необходимо разобраться в:
применяемых в ней терминах и концепциях;
в ее внутренних механизмах;
ее командах;
рабочих процессах, которые могут быть сформированы на ее основе.