Библиотека сайта rus-linux.net
Git
Глава 6 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: Git
Автор: Susan Potter
Дата публикации: 26 Апреля 2012 г.
Перевод: А.Панин
Дата перевода: 26 Сентября 2013 г.
6.1. Пара слов о Git
Git позволяет хранить копию данных работы (представленную обычно, но не всегда в форме программного кода), выполняемой взаимодействующими друг с другом участниками проекта с использованием распределенной сети репозиториев. Эта система контроля версий поддерживает распределение процессов разработки отдельных частей проекта, позволяя временно вносить несоответствия и в конечном счете объединять данные проекта.
В данной главе мы покажем то, как различные части проекта Git выполняют свои функции для реализации описанных возможностей, а также обозначим отличия этого проекта от других проектов систем контроля версий (VCS).
6.2. Начало развития проекта Git
Для лучшего понимания философии, стоящей за архитектурой проекта Git полезно понять обстоятельства, в которых участники сообщества разработчиков ядра Linux начали работу над проектом Git.
Проект разработки ядра Linux отличался от проектов разработки большинства коммерческих приложений того времени с точки зрения разработчиков, так как в его рамках работало большое количество людей, вносящих изменения в исходный код, причем эти люди значительно отличались по степени вовлеченности в проект и знаниям в области существующей кодовой базы. Разработка ядра в течение долгих лет велась с использованием архивов с исходным кодом и патчей, причем основные члены сообщества разработчиков пытались найти систему контроля версий, удовлетворяющую большей части их требований.
Git является проектом с открытым исходным кодом, который был создан для удовлетворения этих требований и исправления существующих недостатков процесса разработки в 2005 году. В это время кодовая база ядра Linux была распределена между двумя системами контроля версий BitKeeper и CVS в соответствии с предпочтениями различных разработчиков. Система BitKeeper предоставляла отличный взгляд на формирование истории системы контроля версий в отличие от популярных систем контроля версий с открытым исходным кодом того времени.
Через некоторое время создавшая систему BitKeeper компания BitMover объявила о намерении отозвать лицензии у некоторых разработчиков ядра Linux. После этого Linus Torvalds второпях начал разработку системы контроля версий, которая в данный момент носит имя Git. Он начал с разработки набора сценариев для упрощения процесса последовательного применения патчей из электронных писем. Целью разработки этого начального набора сценариев была реализация возможности быстрой отмены изменений исходного кода, причем у разработчика должна была быть возможность модификации кодовой базы для последующего наложения патча в ручном режиме с последующей возможностью возобновления автоматического применения патчей.
- Реализация возможности распределения процессов разработки по аналогии с тем, как это было реализовано в рамках проекта BitKeeper
- Введение защитных мер, предотвращающих повреждение хранимых системой данных
- Достижение высокой производительности системы
Эти цели проектирования были приняты и поддержаны в некоторой степени, о чем я попытаюсь рассказать в ходе исследования методов использования в рамках Git ациклических ориентированных графов (DAG) для хранения данных, указателей ссылок для рабочих веток, представления объектной модели и удаленного протокола; и наконец о том, как Git отслеживает объединение древовидных представлений данных.
Несмотря на влияние, оказанное на начальную архитектуру Git проектом BitKeeper, реализация архитектурных решений имела фундаментальные отличия и позволила достичь большей степени распределения и возможности работы исключительно в локальном режиме, что было невозможно при использовании BitKeeper. Распределенная система контроля версий Monotone, разработка которой началась в 2003 году, похоже, была еще одним источником вдохновения, используемым на начальном этапе разработки Git.
- Предоставление возможности совместной работы без подключения к сети с последующим инкрементальным внесением изменений в кодовую базу.
- Предоставление участнику процесса разработки возможности принимать решение о том, готова ли его/ее работа для всеобщего обозрения.
- Предоставление участнику процесса разработки возможности осуществления доступа к истории изменения репозитория без подключения к сети.
- Возможность публикации имеющейся работы во множестве репозиториев, причем работа может быть опубликована в различных ветвях и с различной видимой детализацией изменений.
Во время начала работы над проектом Git была начата разработка трех других проектов распределенных систем контроля версий с открытым исходным кодом. (Одна из этих систем под названием Mercurial описывается в Главе 1 книги "Архитектура приложений с открытым исходным кодом".) Все эти распределенные системы контроля версий предоставляют незначительно отличающиеся способы формирования гибких рабочих процессов, которые не могли быть непосредственно реализованы при использовании централизованных систем контроля версий, существовавших до них. Примечание: система Subversion предусматривает возможность использования поддерживаемого различными разработчиками расширения SVK, предназначенного для синхронизации данных между серверами.
На сегодняшний день популярными и активно разрабатываемыми распределенными системами контроля версий с открытым исходным кодом являются Bazaar, Darcs, Fossil, Git, Mercurial и Veracity.
Следующий раздел: Архитектура системы контроля версий