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

Контрольные вопросы¶
Что представляет наибольшую ценность в IT-предприятии:
команда и исходный код;
зарплата и карьера;
активы и бренд;
низкие налоги и освобождение от службы в ВС РФ;
Что делает Git с исходным кодом?
выдает только тем, кому надо;
собирает исполняемые файлы и тестирует их;
хранит и управляет его состоянием;
управляет разработкой ПО;
Дайте краткое определение Git.
утилита командной строки;
служба помощи разработчикам;
система для изолированной работы над проектами;
распределенная система контроля версий;
Что значит слово “система” в определении Git?
набор взаимодействующих между собой программных компонент;
совокупность инструментов, теории и рекомендаций;
организационная структура участников проекта в динамике;
в определении Git такого слова нет;
Что значит слово “контроль” в определении Git?
набор действий над прошлыми и текущими состояниями электронных документов;
защита от деструктивных действий;
защита от случайных изменений;
в определении Git такого слова нет;
Что значит слово “версия” в определении Git?
набор электронных документов;
действия по наполнению файлов полезным и согласованным содержимым;
состояние файлов проекта на конкретный момент времени;
в определении Git такого слова нет;
Что значит слово “распределенная” в определении Git?
Git самодостаточна и не зависит от доступности внешних ресурсов;
функциональные части Git выполняются в распределенной системе;
не подвержен интернет-блокировке;
в определении Git такого слова нет;
Что дает Git своим пользователям?
работать изолированно и в команде;
масштабировать процессы разработки;
полный контроль над действиями других;
изоляцию от команды;
Что лежит в основе преимущества Git над остальными аналогичными системами?
хеш-суммы для защиты коммитов от подмены данных;
репутация первоначального автора Линуса Торвальдса;
помощь в продвижении инструмента через GitHub и GitLab;
концепция веток и ее удачная техническая реализация;