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

Элементы системы контроля версий (СКВ) программных продуктов. Критерии выбора и архитектура. Типовые примеры веток. Схема локальной СКВ. Централизованное управление версиями. Распределенные системы контроля версий. Контентно-адресуемая файловая система.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.05.2014
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Содержание

  • Введение
  • 1. Общие сведения
  • Все эти системы объединяет то, что это системы с одним, выделенным сервером, на котором и находится репозиторий с кодом.
  • 2 Типы систем контроля версий (СКВ)
  • 2.1 Локальные СКВ
  • 2.2 Централизованные СКВ
  • 2.3 Распределённые системы контроля версий
  • 3. Критерии выбора СКВ
  • 4. Система контроля версий Git
  • 4.1 Достоинства и недостатки
  • 4.2 Структура Git
  • 4.3 Отличительные особенности Git
  • 4.3.1 Слепки вместо патчей
  • 4.3.2 Почти все операции - локальные.
  • 4.3.3 Git следит за целостностью данных
  • 4.3.4 Защита данных
  • 4.3.5 Три состояния файлов
  • 4.3.5 Контентно-адресуемая файловая система
  • Заключение

Введение

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

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

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

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

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

1. Общие сведения

Система контроля версий - это программное обеспечение, позволяющее создавать версии элементов и работать с этими версиями, как с самостоятельными элементами. В англоязычных источниках используется термин version control systems, сокращенно VCS. Работа с версиями предполагает как создание самих версий, так и структуры для их хранения. Как правило, это или цепочки, или деревья. Прежде чем работать с элементами и их версиями, надо эти элементы создать, т.е. дать указать системе контроля версий взять имеющиеся объекты реального мира и поместить их под свой контроль. Вместе с самим элементом всегда создается и его первая версия.

Чаще всего в качестве элементов для контроля версий выступают:

ѕ файлы;

ѕ директории;

ѕ hard - и softlinks.

Внутри системы контроля сами элементы могут размещаться по-разному - это зависит от архитектуры СКВ. Пользователю важно лишь знать, что элемент помещается внутри хранилища и работа с ним идет с помощью команд выбранного инструментария. Как уже было сказано, системы контроля должны предоставлять структуры для хранения версий. Самым распространенным представлением подобной структуры является дерево версий. Это такая организация версий элемента, при которой на основе любой версии элемента конфигурации может быть создано несколько наборов последовательностей его версий. При этом отдельный набор версий, происходящий из произвольной версии, называется веткой. И поскольку ветка содержит версии, то каждая из версий может быть источником для создания других веток.

Типовые примеры веток таковы:

контроль версия программный продукт

ѕ ветка для запроса на изменения - заводится для версий, создаваемых в ходе работы по запросу на изменение ("девелоперская", или "сиарная", ветка);

ѕ интеграционная ветка - служит промежуточным хранилищем для процесса стабилизации;

ѕ релизная ветка - для выкладывания версий при стабилизации конфигурации (см. соответствующий раздел первой части статьи). Какие-то версии на ветке могут быть в дальнейшем объявлены частью базовой конфигурации;

ѕ отладочная ("дебажная") ветка - для кратковременного хранения версий, в основном, для целей проверки каких-либо решений.

Рисунок 1 - Дерево версий элемента element. c

На рисунке 1 изображен пример дерева версий. У файла element. c создана релизная ветка release_1. x, куда складываются стабилизированные версии этого элемента (1-5). Для сохранения дельты по каждому запросу на изменения заводится отдельная ветка со специальным форматом имени. В нашем случае формат имеет вид rec<номер_записи>_<имя_пользователя>, где номер_записи - это ID запроса на изменение в системе отслеживания. Для объединения дельты от разных разработчиков создаются интеграционные ветки с названиями вида int_<имя_пользователя>_<суффикс>, где суффикс хранит описание интеграции или номер стабилизируемой конфигурации. Также можно увидеть ветку для отладки, чаще всего они именуются как dbg_<имя пользователя>_<произвольный_комментарий> - на неё выкладываются проверочные варианты изменений.

Каждый проект может иметь свои способы создания и именования веток, однако основные из них были перечислены выше. Дерево версий растет и ширится, и рано или поздно надо результаты работы объединять. Например, разработчик отрастил ветку у одного из элементов для работы над запросом на изменение. На неё он положил несколько версий, и последняя является той, которая содержит отлаженный и протестированный код. В то же время есть релизная ветка, где лежат версии, выпускаемые в рамках базовых конфигураций и стабильных релизов. Необходимо соединить результаты.

Для этого используется механизм слияния версий. Как правило, он подразумевает создание новой версии элемента, для которой в качестве основы берется базовая версия на выбранной ветке (база), и к ней применяются изменения, содержащиеся в выбранной сторонней версии (источнике). В англоязычных источниках используется термин merge ("мёрж"). Ветка с версией-источником может быть отращена как от версии-источника, так и от его более ранних предков. Существующие СКВ позволяют делать слияние как вручную, так и автоматически. Причем второй способ является основным. Ручное слияние запрашивается лишь в случае конфликтов.

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

К вопросу об общих предках и о слиянии изменений: кроме ручного и автоматического, слияние может быть произведено двухпозиционным и трёхпозиционным способом. Двухпозиционное слияние производится простым сравнением двух версий и сложением их дельты (разницы между версиями элемента). Алгоритм работает по принципу diff'а или приближенно к нему: взять дельту и вставить/удалить/изменить нужные строки.

Трехпозиционное слияние учитывает "общего предка" обеих версий и высчитывает дельту исходя из истории изменения элемента в соответствующих ветках. Соответственно, при возникновении конфликта слияния разработчику предлагается 3 версии элемента - общий предок и 2 варианта, что с этим предком стало с течением времени и изменений. Такой подход помогает оценить степень и важность дельты на обеих ветках и принять решение о необходимости интеграции конфликтного куска часто даже без участия авторов изменений.

После того как слияние проведено, информация о нём должна быть сохранена, если это возможно. Как правило, большинство зрелых VCS имеют возможность сохранить "стрелки слияния" - метаинформацию о том, откуда, куда и в каком момент времени сливались изменения и кто это делал.

Основная идея систем контроля версий - запоминать все внесенные изменения, а так же комментарии пользователей, их вносивших. После этого становится понятно кто когда и что менял, зачем и почему. И, что немаловажно, все эти изменения можно потом откатить на любой момент времени. Ну и, помимо всего этого, систему контроля версий можно ещё дополнительно расширить различными плагинами.

Самые известные системы контроля версий, которые чаще всего упоминаются - CVS, Subversion, Git, Mercurial, Bazaar и Monotone.

Все эти системы объединяет то, что это системы с одним, выделенным сервером, на котором и находится репозиторий с кодом.

2 Типы систем контроля версий (СКВ)

2.1 Локальные СКВ

Многие люди, чтобы управлять версиями, просто копируют файлы в другой каталог (умные ещё пишут текущую дату в название каталога). Такой подход очень распространён, потому что прост, но он ещё и чаще даёт сбои. Очень легко забыть, что ты не в том каталоге, и случайно изменить не тот файл, либо скопировать и перезаписать файлы не туда, куда хотел.

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

Рисунок 2 - Схема локальной СКВ.

Одной из наиболее популярных СКВ данного типа является rcs, которая до сих пор устанавливается на многие компьютеры. Даже в современной операционной системе Mac OS X утилита rcs устанавливается вместе с Developer Tools. Эта утилита основана на работе с наборами патчей между парами изменений (патч - файл, описывающий различие между файлами), которые хранятся в специальном формате на диске. Это позволяет пересоздать любой файл на любой момент времени, последовательно накладывая патчи.

2.2 Централизованные СКВ

Следующей большой проблемой оказалась необходимость сотрудничать с разработчиками за другими компьютерами. Чтобы решить её, были созданы централизованные системы управления версиями (ЦСКВ). В таких системах, например CVS, Subversion и Perforce, есть центральный сервер, на котором хранятся все отслеживаемые файлы, и ряд клиентов, которые получают копии файлов из него. Много лет это был стандарт управления версиями (см. рис. 3).

Рисунок 3 - Схема централизованного управления версиями.

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

Однако при таком подходе есть и несколько серьёзных недостатков. Наиболее очевидный - централизованный сервер является уязвимым местом всей системы. Если сервер выключается на час, то в течение часа разработчики не могут взаимодействовать, и никто не может сохранить новые версии. Если же повреждается диск с центральной базой данных и нет резервной копии, вы теряете абсолютно всё - всю историю проекта, разве что за исключением нескольких рабочих версий, сохранившихся на рабочих машинах пользователей. Локальные системы управления версиями подвержены той же проблеме: если вся история проекта хранится в одном месте, вы рискуете потерять всё.

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

В такой ситуации в игру вступают распределенные системы управления версиями (РСКВ). В таких системах как Git, Mercurial, Bazaar или Darcs, клиенты не просто забирают последние версии файлов, а полностью копируют репозиторий. Поэтому в случае, когда "умирает" сервер, через который шла работа, любой клиентский репозиторий может быть скопирован обратно на сервер, чтобы восстановить базу данных. Каждый раз, когда клиент забирает свежую версию файлов, создаётся полная копия всех данных (см. рисунок 4).

Рисунок 4 - Схема распределенной системы управления версиями

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

3. Критерии выбора СКВ

Выбор СКВ, удовлетворяющей требованиям разработчиков зависит от нескольких вещей, включающих в себя следующее:

ѕ типы файлов, с которыми придется работать;

ѕ люди, которые будут работать с СКВ;

ѕ операционная система, которая будет использована.

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

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

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

У каждого разработчика на машине есть свой локальный репозиторий - место хранения версий файлов. Работа с данными проекта реализуется над вашим локальным репозиторием, и для этого необязательно поддерживать связь с остальными (пусть даже и главными) ветвями разработки. Связь с другими репозиториями понадобится лишь при изменении/чтении версий файлов других ветвей. При этом каждый участник проекта задает права собственного хранилища на чтение и запись. Таким образом, все ветви в распределенных СКВ равны между собой, и главную из них выделяет координатор. Отличие главной ветви лишь в том, что на неё мысленно будут равняться разработчики.

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

Основными достоинствами git (в сравнении с другими распределёнными системами контроля версий) в настоящее время принято считать:

ѕ Надежность;

ѕ Гибкость;

ѕ Высокая скорость работы;

ѕ Высокую производительность.

ѕ Прекрасная интеграция git и Subversion при помощи git-svn (в Mercurial есть hgsvn, но git-svn более удобный);

ѕ Управление контентом, а не управление файлами. Это значит, что git в состоянии отследить без дополнительной подсказки со стороны пользователя, когда данные переносятся из одного файла в другой, а также когда файлы переименовываются.

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

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

4.1 Достоинства и недостатки

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

Git, на фоне других СКВ, выделяется главным образом из-за того, что он применяется для разработки ядра Linux (http://www.kernel.org). Собственно, именно для этого Git и разрабатывался. Ядро Linux - весьма немаленький проект, как по объему исходного кода, так и по числу участников, поэтому при его разработке большое внимание было уделено производительности и легкости слияния веток.

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

Часто при работе с Git создают центральный репозиторий, с которым остальные разработчики синхронизируются. Пример организации системы с центральным репозиторием - это проект разработки ядра Linux'a (http://www.kernel.org).

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

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

Работа над версиями проекта в Git может вестись в нескольких ветках, которые затем могут с легкостью полностью или частично объединяться, уничтожаться, откатываться и разрастаться во все новые и новые ветки проекта.

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

1. Надежная система сравнения ревизий и проверки корректности данных, основанные на алгоритме хеширования SHA1 (Secure Hash Algorithm 1).

2. Гибкая система ветвления проектов и слияния веток между собой.

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

4. Высокая производительность и скорость работы.

5. Возможность делать контрольные точки. Это позволяет уменьшить скорость восстановления данных, так как за основу берется ближайшая контрольная точка, и восстановление идет от нее. Если бы контрольные точки отсутствовали, то восстановление больших проектов могло бы занимать часы.

6. Широкая распространенность и легкая доступность.

7. Гибкость системы позволяет удобно ее настраивать и даже создавать специализированные контроля системы или пользовательские интерфейсы на базе git.

8. Универсальный сетевой доступ с использованием протоколов http, ftp, rsync, ssh и др.

Недостатки:

1. Unix - ориентированность.

2. Возможные (но чрезвычайно низкие) совпадения хеш - кода отличных по содержанию ревизий.

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

4.2 Структура Git

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

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

По умолчанию репозиторий хранится в подкаталоге с названием". git" в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории. Любое файловое дерево в системе можно превратить в репозиторий git, отдав команду создания репозитория из корневого каталога этого дерева (или указав корневой каталог в параметрах программы). Репозиторий может быть импортирован с другого узла, доступного по сети. При импорте нового репозитория автоматически создаётся рабочая копия, соответствующая последнему зафиксированному состоянию импортируемого репозитория (то есть не копируются изменения в рабочей копии исходного узла, для которых на том узле не была выполнена команда commit).

4.3 Отличительные особенности Git

4.3.1 Слепки вместо патчей

Главное отличие Git от любых других СКВ (например, Subversion и ей подобных) это то, как Git смотрит на данные. В принципе, большинство других систем хранит информацию как список изменений (патчей) для файлов. Эти системы (CVS, Subversion, Perforce, Bazaar и другие) относятся к хранимым данным как к набору файлов и изменений сделанных для каждого из этих файлов во времени, как показано на рисунке 5.

Рисунок 5 - Другие системы хранят данные как изменения к базовой версии для каждого файла.

Git не хранит свои данные в таком виде. Вместо этого Git считает хранимые данные набором слепков небольшой файловой системы. Каждый раз, когда вы фиксируете текущую версию проекта, Git, по сути, сохраняет слепок того, как выглядят все файлы проекта на текущий момент. Ради эффективности, если файл не менялся, Git не сохраняет файл снова, а делает ссылку на ранее сохранённый файл. То, как Git подходит к хранению данных, похоже на рисунок 6.

Рисунок 6 - Git хранит данные как слепки состояний проекта во времени.

Это важное отличие Git от практически всех других систем управления версиями. Из-за него Git вынужден пересмотреть практически все аспекты управления версиями, которые другие системы взяли от своих предшественниц. Git больше похож на небольшую файловую систему с невероятно мощными инструментами, работающими поверх неё, чем на просто СКВ. В главе 3, коснувшись работы с ветвями в Git, мы узнаем, какие преимущества даёт такое понимание данных.

4.3.2 Почти все операции - локальные.

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

К примеру, чтобы показать историю проекта, Git-у не нужно скачивать её с сервера, он просто читает её прямо из вашего локального репозитория. Поэтому историю вы увидите практически мгновенно. Если вам нужно просмотреть изменения между текущей версией файла и версией, сделанной месяц назад, Git может взять файл месячной давности и вычислить разницу на месте, вместо того чтобы запрашивать разницу у сервера СКВ или качать с него старую версию файла и делать локальное сравнение.

Кроме того, работа локально означает, что мало чего нельзя сделать без доступа к Сети или VPN. Если вы в самолёте или в поезде и хотите немного поработать, можно спокойно делать коммиты а затем отправить их, как только станет доступна сеть. Если вы пришли домой, а VPN клиент не работает, всё равно можно продолжать работать. Во многих других системах это невозможно, или же крайне неудобно. Например, используя Perforce, вы мало что можете сделать без соединения с сервером. Работая с Subversion и CVS, вы можете редактировать файлы, но сохранить изменения в вашу базу данных нельзя (потому что она отключена от репозитория). Вроде ничего серьёзного, но потом вы удивитесь, насколько это меняет дело.

4.3.3 Git следит за целостностью данных

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

Механизм, используемый Git для вычисления контрольных сумм, называется SHA-1 хеш. Это строка из 40 шестнадцатеричных знаков (0-9 и a-f), которая вычисляется на основе содержимого файла или структуры каталога, хранимого Git. SHA-1 хеш выглядит примерно так:

24b9da6552252987aa493b52f8696cd6d3b00373

Работая с Git, вы будете постоянно встречать эти хеши, поскольку они широко используются. Фактически, в своей базе данных Git сохраняет всё не по именам файлов, а по хешам их содержимого.

4.3.4 Защита данных

Практически все действия, которые вы совершаете в Git, только добавляют данные в базу. Очень сложно заставить систему удалить данные или сделать что-то неотменяемое. Можно, как и в любой другой СКВ, потерять данные, которые вы ещё не сохранили, но как только они зафиксированы, их очень сложно потерять, особенно если вы регулярно отправляете изменения в другой репозиторий.

Поэтому пользоваться Git - удовольствие, потому что можно экспериментировать, не боясь серьёзно что-то потерять.

4.3.5 Три состояния файлов

В Git файлы могут находиться в одном из трёх состояний: зафиксированном, изменённом и подготовленном. "Зафиксированный" значит, что файл уже сохранён в вашей локальной базе. К изменённым относятся файлы, которые поменялись, но ещё не были зафиксированы. Подготовленные файлы - это изменённые файлы, отмеченные для включения в следующий коммит.

Таким образом, в проекте с использованием Git есть три части: каталог Git (Git directory), рабочий каталог (working directory) и область подготовленных файлов (staging area).

\

Рисунок 7 - Рабочий каталог, область подготовленных файлов, каталог Git.

Каталог Git - это место, где Git хранит метаданные и базу данных объектов вашего проекта. Это наиболее важная часть Git, и именно она копируется, когда вы клонируете репозиторий с другого компьютера.

Рабочий каталог - это извлечённая из базы копия определённой версии проекта. Эти файлы достаются из сжатой базы данных в каталоге Git и помещаются на диск для того, чтобы вы их просматривали и редактировали.

Область подготовленных файлов - это обычный файл, обычно хранящийся в каталоге Git, который содержит информацию о том, что должно войти в следующий коммит. Иногда его называют индексом (index), но в последнее время становится стандартом называть его областью подготовленных файлов (staging area).

Стандартный рабочий процесс с использованием Git выглядит примерно так:

1. Вы изменяете файлы в вашем рабочем каталоге.

2. Вы подготавливаете файлы, добавляя их слепки в область подготовленных файлов.

3. Вы делаете коммит. При этом слепки из области подготовленных файлов сохраняются в каталог Git.

Если рабочая версия файла совпадает с версией в каталоге Git, файл считается зафиксированным. Если файл изменён, но добавлен в область подготовленных данных, он подготовлен. Если же файл изменился после выгрузки из БД, но не был подготовлен, то он считается изменённым. В главе 2 вы узнаете больше об этих трёх состояниях и как можно либо воспользоваться этим, либо пропустить стадию подготовки.

4.3.5 Контентно-адресуемая файловая система

Git это по сути контентно-адресуемая файловая система с пользовательским СКВ-интерфейсом поверх неё. На заре развития Git, интерфейс был значительно сложнее, поскольку был более похож на интерфейс доступа к файловой системе, чем на законченную СКВ. За последние годы, интерфейс значительно улучшился и по удобству не уступает аналогам; у некоторых, тем не менее, с тех пор сохранился стереотип о том, что интерфейс у Git чересчур сложный и труден для изучения.

В своей основе Git - простое хранилище ключ-значение. Можно добавить туда любое содержимое, в ответ будет выдан ключ, по которому это содержимое можно извлечь

Заключение

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

При выборе СКВ для сравнительно небольшой команды разработчиков предпочтение отдается распределенным СКВ в силу их гибкости при организации рабочего процесса. Удобство таких систем в том, что каждый разработчик имеет возможность вести работу независимо, время от времени обмениваясь промежуточными вариантами файлов с другими участниками проекта.

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

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.