Git - Основные понятия
Система контроля версий
Version Control System (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.
Step 1 - Вы изменяете файл из рабочего каталога.
Step 2 - Вы добавляете эти файлы в область подготовки.
Step 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”
Капли
Blob означает Bначальный Large Obобъект. Каждая версия файла представлена большим двоичным объектом. Большой двоичный объект содержит данные файла, но не содержит метаданных о файле. Это двоичный файл, и в базе данных Git он называется хеш-кодом SHA1 этого файла. В Git к файлам не обращаются по именам. Все адресовано по содержанию.
Деревья
Дерево - это объект, представляющий каталог. Он содержит капли, а также другие подкаталоги. Дерево - это двоичный файл, в котором хранятся ссылки на капли и деревья, которые также называютсяSHA1 хеш объекта дерева.
Совершает
Коммит содержит текущее состояние репозитория. Коммит также называетсяSHA1хэш. Вы можете рассматривать объект фиксации как узел связанного списка. Каждый объект фиксации имеет указатель на родительский объект фиксации. Из заданной фиксации вы можете вернуться назад, посмотрев на родительский указатель, чтобы просмотреть историю фиксации. Если фиксация имеет несколько родительских коммитов, то эта конкретная фиксация была создана путем слияния двух ветвей.
ветви
Филиалы используются для создания еще одной линии развития. По умолчанию у Git есть главная ветвь, такая же, как у ствола в Subversion. Обычно ветка создается для работы над новой функцией. Как только функция завершена, она снова объединяется с основной веткой, и мы удаляем ветку. На каждую ветку ссылается HEAD, который указывает на последнюю фиксацию в ветке. Каждый раз, когда вы делаете коммит, HEAD обновляется последней фиксацией.
Теги
Тег присваивает содержательное имя определенной версии в репозитории. Теги очень похожи на ветки, но разница в том, что теги неизменяемы. Значит, тег - это ветка, которую никто не собирается изменять. После создания тега для конкретной фиксации, даже если вы создаете новую фиксацию, он не будет обновлен. Обычно разработчики создают теги для выпусков продуктов.
Клонировать
Операция клонирования создает экземпляр репозитория. Операция клонирования не только проверяет рабочую копию, но также отражает весь репозиторий. Пользователи могут выполнять множество операций с этим локальным репозиторием. Единственный раз, когда в сеть включается, - это когда экземпляры репозитория синхронизируются.
Тянуть
Операция извлечения копирует изменения из экземпляра удаленного репозитория в локальный. Операция извлечения используется для синхронизации между двумя экземплярами репозитория. Это то же самое, что и операция обновления в Subversion.
От себя
Операция push копирует изменения из экземпляра локального репозитория в удаленный. Это используется для постоянного хранения изменений в репозитории Git. Это то же самое, что и операция фиксации в Subversion.
ГОЛОВА
HEAD - это указатель, который всегда указывает на последнюю фиксацию в ветке. Каждый раз, когда вы делаете коммит, HEAD обновляется последней фиксацией. Головки веток хранятся в.git/refs/heads/ каталог.
[CentOS]$ ls -1 .git/refs/heads/
master
[CentOS]$ cat .git/refs/heads/master
570837e7d58fa4bccd86cb575d884502188b0c49
Редакция
Редакция представляет собой версию исходного кода. Редакции в Git представлены коммитами. Эти коммиты обозначеныSHA1 безопасные хэши.
URL
URL-адрес представляет собой расположение репозитория Git. URL-адрес Git хранится в файле конфигурации.
[tom@CentOS tom_repo]$ pwd
/home/tom/tom_repo
[tom@CentOS tom_repo]$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:project.git
fetch = +refs/heads/*:refs/remotes/origin/*