W3docs

Что такое Git

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

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

Определение

Git — это система контроля версий (VCS), которая записывает изменения набора файлов с течением времени, чтобы можно было вернуться к любой более ранней версии, увидеть, кто и что изменил, и работать над одним проектом параллельно, не перезаписывая результаты работы друг друга. Это наиболее широко используемая VCS в разработке программного обеспечения.

Git был создан в 2005 году Линусом Торвальдсом, автором ядра Linux, для управления исходным кодом самого Linux после того, как проект лишился доступа к предыдущему инструменту. Сегодня Git используется в проектах любого масштаба — от отдельного скрипта до самого ядра Linux.

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

Распределённые и централизованные системы. В централизованной VCS (например, Subversion) есть один авторитетный сервер, и для создания коммита требуется сетевое соединение. В распределённой VCS, такой как Git, каждый клон является полной резервной копией, большинство операций выполняются локально и поэтому быстро, а единой точки отказа не существует.

Важность Git

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

  • Дешёвое локальное ветвление. Создание ветки происходит почти мгновенно, потому что Git записывает лишь небольшой указатель, поэтому эксперименты в изолированной среде — норма, а не исключение. Смотрите git branch.
  • Удобная область индексирования. Git позволяет точно выбрать, какие изменения войдут в следующий коммит, до его записи, что позволяет делать коммиты сфокусированными. Смотрите git add.
  • Поддержка различных рабочих процессов. Один и тот же инструмент подходит как одному разработчику, так и команде из 100 человек. Смотрите Git workflows.
  • Бесплатный и открытый исходный код. Нет затрат на лицензию, а исходный код открыт для изучения и участия.
  • Нелинейная разработка. Многие направления работы могут вестись параллельно и впоследствии объединяться, что позволяет разработчикам и командам работать независимо, не мешая друг другу.

Source Code Management

Производительность Git

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

Ключевым архитектурным решением является то, что Git отслеживает содержимое, а не файлы. При создании коммита Git сохраняет снимок содержимого каждого файла; если файл не изменился между коммитами, Git хранит указатель на идентичное содержимое, которое уже есть, а не новую копию. Поскольку хранение организовано по содержимому, Git может определить, был ли файл просто переименован, разбит или реорганизован. На диске объекты репозитория используют сочетание дельта-кодирования (хранение различий между похожими объектами) и сжатия zlib, что делает даже длинные истории компактными.

Безопасность Git

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

Git исторически использовал SHA-1 для этих хешей и переходит на SHA-256 для усиления этой гарантии. Помимо целостности, можно также подтвердить авторство коммита, подписав коммиты и теги ключом GPG или SSH, чтобы рецензенты могли убедиться, что изменение пришло от доверенного автора.

Гибкость Git

Одним из преимуществ Git является его гибкость в нескольких аспектах:

  • Отслеживание изменений — каждый коммит содержит автора, временну́ю метку и сообщение, поэтому у вас всегда есть читаемая запись о том, что и почему изменилось.
  • Резервное копирование и восстановление — поскольку каждый клон содержит полную историю, компьютер каждого разработчика фактически является резервной копией, и любое прошлое состояние можно восстановить.
  • Совместная работа — команды могут одновременно работать над одним проектом и объединять свою работу с помощью слияния.
  • Ветвление и слияние — работа ведётся в ветке, и после проверки и одобрения она сливается обратно в основную ветку. История показывает, кто изменил каждый файл и какие именно строки отличаются.
  • Развёртывание — Git не выполняет развёртывание кода самостоятельно, но отслеживает точные версии и легко интегрируется с конвейерами CI/CD, которые собирают и выгружают эти версии.

Flexibility of Git

Контроль версий с помощью Git

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

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

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

Наиболее популярные Git-решения

Несколько сторонних платформ управляют репозиториями Git и широко используются для быстрой и эффективной разработки программного обеспечения. Наиболее популярными хостинговыми сервисами на основе Git являются GitHub, Bitbucket и GitLab.

GitHub — это хостинг репозиториев на основе Git, первоначально запущенный в 2008 году Томом Престоном-Вернером, Крисом Ванстратом и PJ Хайэттом. Это крупнейшая платформа для хостинга репозиториев с более чем 38 миллионами проектов. Она позволяет размещать и проверять код, управлять проектами и разрабатывать программное обеспечение.

Bitbucket был запущен в 2008 году австралийским стартапом и изначально поддерживал только проекты Mercurial. В 2010 году Bitbucket был приобретён Atlassian, и с 2011 года начал поддерживать хостинг Git, который теперь является его основным направлением. Он предоставляет неограниченное количество бесплатных приватных репозиториев, интеграцию с Jira и Trello, а также встроенную непрерывную доставку.

GitLab был основан Дмитрием Запорожцем и Валерием Сизовым в 2011 году с целью предоставить альтернативу существующим решениям для управления репозиториями. Компания была зарегистрирована лишь в 2014 году. Она предоставляет непрерывную интеграцию и доставку, agile-разработку, Auto DevOps и многое другое.

Основные команды Git

После установки Git несколько основных команд охватывают повседневный рабочий процесс:

  • git init — создаёт новый репозиторий Git в текущем каталоге.
  • git clone <url> — загружает существующий репозиторий с полной историей с удалённого сервера.
  • git add <file> — добавляет изменения в индекс, чтобы они вошли в следующий коммит.
  • git commit -m "message" — записывает проиндексированные изменения как новый снимок с описательным сообщением.
  • git status — показывает, какие файлы изменены, проиндексированы или не отслеживаются.
  • git push — отправляет локальные коммиты в удалённый репозиторий.

Первый репозиторий от начала до конца

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

# 1. Start tracking the current folder
git init

# 2. Create a file and stage it for the next commit
echo "# My Project" > README.md
git add README.md

# 3. Record the snapshot
git commit -m "Add project README"

# 4. See the history you just created
git log --oneline

Вывод git log --oneline — одна строка на коммит: короткий хеш, за которым следует сообщение:

a1b2c3d (HEAD -> main) Add project README

Далее можно добавить удалённый репозиторий и выполнить git push, чтобы поделиться работой, или создать ветку для реализации новой функции. Глава git log подробнее рассматривает чтение истории.

Практика

Практика
Каковы ключевые возможности и преимущества Git?
Каковы ключевые возможности и преимущества Git?
Was this page helpful?