Рассказываю про Git – популярнейшую систему контроля версий для разработчиков.
Что такое Git?
Git – это три сервиса в одном. Целый комплекс программных решений, используемых в различных сферах деятельности для отслеживания итераций разрабатываемого продукта.
Чаще всего Git используется в разработке приложений и сайтов, но он также находит применение и в других сферах, например в переводах книг.
Объяснить в двух словах всю систему почти нереально, потому что Git включает в себя настолько разношерстные функции и возможности, что подогнать общую идею под один с ходу понятный термин не представляется возможным. Поэтому начнем с базового определения и постепенно перейдем к конкретным функциям.
Система контроля
Под системой контроля в контексте Git подразумевается программный механизм для работы с контентом. В «работу» также входит хранение, передача данных, отслеживание изменений и прочие аспекты.
Система контроля версий
Как я уже отмечал выше, обычно Git используют для работы с программным кодом. Кодеры ведут разработку своих продуктов, используя систему контроля версий, чтобы иметь полный контроль над своим детищем, над каждой его версией и вариацией.
То есть в любой момент времени можно вернуться в прошлое и восстановить предыдущую версию программы, если новый релиз все поломал. Или когда срочно нужно посмотреть, как выглядел код до рефакторинга.
И это касается не только кода. Переводы больших книг, дизайнерские работы, рисунки и прочее. Правилам работы в системе контроля версий можно подчинить почти любой продукт, и везде от этого будет только польза.
Распределенная система контроля версий
Также Git позволяет вести параллельную разработку, когда несколько программистов одновременно вносят изменения в одно приложение или сайт, но при этом не мешают друг другу и спокойно дополняют продукт, не вызывая сбоев в работе сервиса/сайта/приложения, которое использует их клиент.
Для этого используются удаленные файловые хранилища, где лежат различные вариации кода. Например:
основное приложение со всеми нужными функциями,
его версия с новым дизайном,
новая версия с дополнительными возможностями.
И пока основное приложение остается нетронутым, две его вариации активно развиваются, пока не станут частью основы. Впрочем, этот аспект Git мы еще разберем более подробно.
Зачем нужен Git?
Затем, чтобы не случился апокалипсис в мире разработки (и не только, но мы будем оперировать именно областью IT). Сейчас трудно представить себе мало-мальски крупное приложение, над которым работал бы один человек. За проектом всегда стоит целая команда создателей. И чтобы им всем было комфортно работать вместе, нужна распределенная система контроля версий. Это гарантия отсутствия конфликтов в коде и возможность вести разработку нескольких функций ПО, не соприкасаясь друг с другом и общим кодом.
Более того, в разработке часто меняются требования к проекту, видение заказчика и стандарты дизайна. Поэтому полный контроль над всеми итерациями приложения позволяет легко «откатывать» любые изменения и вносить поверх них новые.
Подробнее о внутреннем строении Git
Репозитории
Репозиторий (репо, реп) – это хранилище файлов проекта. То есть все компоненты, относящиеся к одному приложению (код, изображения, конфигурационные файлы, стили, скрипты и т.п.). С ним как раз и работают люди, ведущие совместную работу над одним продуктом.
При создании репозитория в папке с файлами формируется .git-директория, включающая в себя информацию, необходимую для корректной работы с системой контроля версий (количество коммитов, ветвей разработки и прочих необходимых деталей).
По умолчанию каталог .git скрыт, но его видят git-приложения, например git, Sublime Merge, Gitfox и другие аналоги.
Коммиты, пуши и стейджинг
Коммит – это единица контента, хранящая в себе информацию о том, какие компоненты репозитория были изменены на текущий момент времени.
За счет них и работает контроль версий. Допустим, вы решили немного поменять оформление сайта. Открываете файл .css, вводите туда новое значение шрифтов или цветов, а потом сохраняете их. Чтобы это изменение отразилось в git, нужно создать коммит (git commit – m, «описание коммита»). Теперь вы можете в любой момент вернуться к этому этапу в разработке сайта.
Стейджинг-зона – это временное пристанище измененных файлов. Отправляясь в стейджинг-зону (git add), они помечаются как «в разработке», но при этом из них все еще можно выбрать готовые файлы, чтобы непосредственно их закоммитить. Файлы хранятся в стейджинг-зоне (git add) до тех пор, пока пользователь не сделает коммит и не запушит (git push) изменения на сервер, то есть не выгрузит с локального репозитория в удаленный.
Удаленные репозитории (GitHub, GitLab и т.п.)
Большинство разработчиков хранят репозитории не на локальных машинах, а в хранилищах наподобие GitHub, BitBucket, GitLab и в их аналогах. Это специализированные веб-ресурсы, поддерживающие все функциональные особенности git и позволяющие работать десяткам разработчиков над одним проектом параллельно, используя единое пространство для хранения всех файлов, их версий и прочих компонентов приложения или сайта.
Коммиты остаются в локальном репо, но с помощью команды push можно отправить их в GitHub. А при помощи команды pull можно вытащить их в локальный реп, чтобы иметь под рукой самую новую версию проекта для дальнейшей разработки новых функций.
Ветви и мерджинг
Две функции, вокруг которых строится параллельная разработка.
Ветви (branches) – это разные состояния одной программы. Например, есть ветка master (иногда ее называют main) – в ней обычно хранится приложение с полным набором функций и дизайном, готовое к деплою (то есть публикации в App Store или загрузке на сервер). Есть ветка develop, в которой программисты корпят над нововведениями. Веток может быть неограниченное количество, хоть по одной для каждой функции.
С помощью ветвей можно избежать изменений в программе до того, как новшества будут протестированы. А еще это помогает вносить срочные изменения в main-ветку, не добавляя при этом в программу недоделанные функции или изменения в дизайне.
Мерджинг (merging) – это процесс объединения одной ветки с другой. Чаще всего – ветки develop с веткой main.
Пул-реквесты
Pull Request – это запрос на проверку и одобрение кода. Когда один из программистов заканчивает свою работу, он отправляет PR своим коллегам. Те проводят аудит кода и выносят вердикт, публикуется этот код или нет.
При этом сам пул-реквест является не просто оповещением о готовности куска кода – это целая система взаимодействия и обсуждения. Один PR может превратиться в десятки комментариев и правок кода. После «обработки» PR превращается в мердж.
Разработчики также стали использовать функцию Pull Request Preview, позволяющую подключить к процессу проверки кода дизайнеров, начальство и заказчиков.
С чего начать работу в Git?
Скачиваем git последней версии с официального сайта. Затем создаем директорию для репозитория и переходим в нее с помощью команды cd.
Создаем новый репо:
git int
Далее создаем документ в формате .txt или .html. Реп готов!
Теперь можно работать с git. Вот список основных команд:
- git add – добавить файл в стейджинг-зону для работы над изменениями.
- git commit – создать коммит.
- git status – посмотреть статус коммитов (их количество, внесенные изменения).
- git branch название ветки – создать новую ветвь.
- git checkout название ветки – переключиться на другую ветвь.
- git merge название ветки – объединить выбранную ветвь с той, к которой подключен пользователь. То есть сначала надо сделать checkout, а потом merge.
- git remote add origin ссылка на удаленный репозиторий – подключиться к удаленной платформе. Ссылку на репо можно взять в GitHub или в GitLab в соответствующем разделе.
- git push -u origin название ветки – отправить набор коммитов в удаленный реп.
- git clone ссылка на удаленный репозиторий – скопировать себе на устройство все данные из GitHub или BitBucket.
На этом все. Вас можно поздравить – теперь вы знаете, что такое git и как работать с системой контроля версий.