Система контроля версий (VCS) — это программное обеспечение, которое помогает разработчикам программного обеспечения работать вместе и вести полную историю своей работы.
Ниже перечислены функции VCS —
- Позволяет разработчикам работать одновременно.
- Не позволяет перезаписывать изменения друг друга.
- Поддерживает историю каждой версии.
Ниже приведены типы VCS —
- Централизованная система контроля версий (CVCS).
- Распределенная / децентрализованная система контроля версий (DVCS).
В этой главе мы сосредоточимся только на распределенной системе контроля версий и особенно на Git. Git попадает под распределенную систему контроля версий.
Распределенная система контроля версий
Централизованная система контроля версий (CVCS) использует центральный сервер для хранения всех файлов и обеспечивает совместную работу команды. Но основным недостатком CVCS является его единственная точка отказа, то есть отказ центрального сервера. К сожалению, если центральный сервер отключается в течение часа, то в течение этого часа никто вообще не может сотрудничать. И даже в худшем случае, если диск центрального сервера будет поврежден и надлежащее резервное копирование не будет выполнено, вы потеряете всю историю проекта. Здесь появляется система распределенного контроля версий (DVCS).
Клиенты DVCS не только проверяют последний снимок каталога, но также полностью отражают хранилище. Если сервер выходит из строя, репозиторий с любого клиента можно скопировать обратно на сервер для его восстановления. Каждая проверка является полной резервной копией хранилища. Git не полагается на центральный сервер, и поэтому вы можете выполнять множество операций, когда находитесь в автономном режиме. Вы можете фиксировать изменения, создавать ветки, просматривать журналы и выполнять другие операции, когда вы не в сети. Требуется подключение к сети только для публикации ваших изменений и принятия последних изменений.
Преимущества Git
Бесплатный и открытый исходный код
Git выпущен под лицензией GPL с открытым исходным кодом. Он доступен бесплатно через Интернет. Вы можете использовать Git для управления имущественными проектами, не платя ни копейки. Поскольку это открытый исходный код, вы можете скачать его исходный код, а также внести изменения в соответствии с вашими требованиями.
Быстрый и маленький
Поскольку большинство операций выполняется локально, это дает огромное преимущество с точки зрения скорости. Git не полагается на центральный сервер; поэтому нет необходимости взаимодействовать с удаленным сервером для каждой операции. Основная часть Git написана на C, что позволяет избежать накладных расходов во время выполнения, связанных с другими языками высокого уровня. Хотя Git отражает весь репозиторий, размер данных на стороне клиента невелик. Это иллюстрирует эффективность Git при сжатии и хранении данных на стороне клиента.
Неявное резервное копирование
Шансы на потерю данных очень редки, если их несколько. Данные, присутствующие на любой стороне клиента, отражают хранилище, поэтому их можно использовать в случае сбоя или повреждения диска.
Безопасность
Git использует общую криптографическую хеш-функцию, называемую защищенной хеш-функцией (SHA1), для именования и идентификации объектов в своей базе данных. Каждый файл и фиксация проверяются суммой и извлекаются по их контрольной сумме во время проверки. Это означает, что невозможно изменить файл, дату и сообщение о коммите и любые другие данные из базы данных Git, не зная Git.
Нет необходимости в мощном оборудовании
В случае CVCS центральный сервер должен быть достаточно мощным, чтобы обслуживать запросы всей команды. Для небольших команд это не проблема, но с ростом размера команды аппаратные ограничения сервера могут стать узким местом в производительности. В случае DVCS разработчики не взаимодействуют с сервером, если им не нужно выдвигать или извлекать изменения. Вся тяжелая работа происходит на стороне клиента, поэтому серверное оборудование действительно может быть очень простым.
Более легкое ветвление
CVCS использует механизм дешевого копирования. Если мы создадим новую ветку, она скопирует все коды в новую ветку, поэтому это отнимает много времени и неэффективно. Кроме того, удаление и объединение ветвей в CVCS является сложным и трудоемким. Но управление ветками с помощью Git очень простое. Создание, удаление и объединение веток занимает всего несколько секунд.
Терминологии DVCS
Локальный репозиторий
Каждый инструмент VCS предоставляет личное рабочее место в качестве рабочей копии. Разработчики вносят изменения на своем рабочем месте, и после фиксации эти изменения становятся частью репозитория. Git делает еще один шаг вперед, предоставляя им личную копию всего хранилища. Пользователи могут выполнять множество операций с этим хранилищем, таких как добавление файла, удаление файла, переименование файла, перемещение файла, принятие изменений и многое другое.
Рабочий каталог и промежуточная область или индекс
Рабочий каталог — это место, где файлы извлекаются. В других CVCS разработчики обычно вносят изменения и фиксируют свои изменения непосредственно в хранилище. Но Git использует другую стратегию. Git не отслеживает каждый измененный файл. Всякий раз, когда вы делаете операцию, Git ищет файлы, присутствующие в промежуточной области. Только те файлы, которые присутствуют в промежуточной области, рассматриваются для фиксации, а не все измененные файлы.
Давайте посмотрим на основной рабочий процесс Git.
Шаг 1 — Вы изменяете файл из рабочего каталога.
Шаг 2 — Вы добавляете эти файлы в область подготовки.
Шаг 3 — Вы выполняете операцию фиксации, которая перемещает файлы из области подготовки. После операции push он постоянно сохраняет изменения в репозитории Git.
Предположим, вы изменили два файла, а именно «sort.c» и «search.c», и вы хотите два разных коммита для каждой операции. Вы можете добавить один файл в область подготовки и сделать коммит. После первого коммита повторите ту же процедуру для другого файла.
# First commit [bash]$ git add sort.c # adds file to the staging area [bash]$ git commit –m “Added sort operation” # Second commit [bash]$ git add search.c # adds file to the staging area [bash]$ git commit –m “Added search operation”
Blobs
Blob обозначает B inary L arge Ob ject. Каждая версия файла представлена блобом. BLOB-объект содержит данные файла, но не содержит метаданных о файле. Это двоичный файл, и в базе данных Git он называется SHA1-хэш этого файла. В Git файлы не адресуются по именам. Все контент-адресовано.
деревья
Дерево — это объект, представляющий каталог. Он содержит капли и другие подкаталоги. Дерево — это двоичный файл, в котором хранятся ссылки на большие двоичные объекты и деревья, которые также называются хешем SHA1 объекта дерева.
Фиксации
Commit хранит текущее состояние хранилища. Коммит также называется хэшем SHA1 . Вы можете рассматривать объект фиксации как узел связанного списка. Каждый объект фиксации имеет указатель на родительский объект фиксации. От данного коммита вы можете вернуться назад, посмотрев на родительский указатель, чтобы просмотреть историю коммита. Если коммит имеет несколько родительских коммитов, то этот конкретный коммит был создан путем слияния двух ветвей.
ветви
Филиалы используются для создания еще одной линии развития. По умолчанию Git имеет основную ветвь, которая совпадает с транком в Subversion. Обычно создается ветка для работы над новой функцией. Как только функция завершена, она объединяется с главной веткой, и мы удаляем ветку. На каждую ветку ссылается HEAD, что указывает на последний коммит в ветке. Всякий раз, когда вы делаете коммит, HEAD обновляется последним коммитом.
Теги
Tag присваивает значимое имя с определенной версией в хранилище. Теги очень похожи на ветки, но разница в том, что теги неизменны. Это означает, что тег — это ветка, которую никто не собирается изменять. После создания тега для определенного коммита, даже если вы создаете новый коммит, он не будет обновляться. Обычно разработчики создают теги для выпусков продуктов.
клон
Операция клонирования создает экземпляр хранилища. Операция клонирования не только проверяет рабочую копию, но также отражает полное хранилище. Пользователи могут выполнять множество операций с этим локальным хранилищем. Единственный раз, когда сетевое взаимодействие включается, это когда синхронизируются экземпляры репозитория.
Тянуть
Операция Pull копирует изменения из удаленного экземпляра репозитория в локальный. Операция извлечения используется для синхронизации между двумя экземплярами репозитория. Это то же самое, что и операция обновления в Subversion.
От себя
Операция Push копирует изменения из локального экземпляра репозитория в удаленный. Это используется для постоянного хранения изменений в репозитории Git. Это то же самое, что и операция фиксации в Subversion.
ГОЛОВА
HEAD — это указатель, который всегда указывает на последний коммит в ветке. Всякий раз, когда вы делаете коммит, HEAD обновляется последним коммитом. Главы веток хранятся в каталоге .git / refs /head / .
[CentOS]$ ls -1 .git/refs/heads/ master [CentOS]$ cat .git/refs/heads/master 570837e7d58fa4bccd86cb575d884502188b0c49
пересмотр
Редакция представляет версию исходного кода. Редакции в Git представлены коммитами. Эти коммиты идентифицируются с помощью безопасных хэшей SHA1 .
URL
URL представляет местоположение Git-репозитория. Git URL хранится в конфигурационном файле.