Работа с git тегами. Что такое git tag? Как создавать теги?

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

Репозитории (места, где хранится код и вся история изменений) содержатся на жестком диске или в Интернете. Второй способ хранения реализуется за счет трёх основных сервисов: GitHub, GitLab и Bitbucket. Благодаря тому, что репозиторием является каждая рабочая копия кода, история сохраняется в полном объеме. У каждой точки сохранения проекта (commit) есть свое наименование (ID) и комментарий. Из этих точек образуется ветка, которая показывает историю изменений. В репозитории может быть одна или несколько таких веток.

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

Вкратце расскажем про разницу между тегами и ветками. И первые, и вторые указывают на определенный коммит. Но, рассматривая тему git tags vs branches, обратим внимание на важный момент. Ветка всегда указывает на верхнюю часть строки разработки. То есть с созданием нового коммита указатель ветки продвигается вперед. Тег, в свою очередь, не изменяется, указывая всегда на один и тот же объект.

Тегать конкретный commit id при выпуске релиза – обычная практика DevOps. Каждый раз перед релизом, даже если нужны изменения, фиксация начинается с того commit id, который был отмечен для релиза. Поэтому даже новичкам в разработке желательно разбираться в этом вопросе: уметь создавать git tags, знать основные команды и применять их на практике.

Из этой статьи вы узнаете:

  • Какие бывают теги?
  • Как их создавать?
  • Что делает git checkout и другие команды?
  • Как сделать клон репозитория, тега и ветки?

Ну что ж, приступим…

Как создавать tag git

В Git используются два типа тегов – легковесные (lightweight) и аннотированные (annotated). Первые похожи на ветку и просто указывают на определенный git tag commit. Вторые – это открытые теги, которые хранятся в БД как полноценные объекты. Здесь есть информация о создателе, его электронной почте, дате, а также комментарии. Когда нужно сохранить эту информацию, создают аннотированные теги. Мы рассмотрим оба варианта процесса create tag git.

Для того чтобы создать облегченный тег, используют команду:

git tag <tag-name>

Мы уже упоминали о том, что теги, как правило, указывают на моменты выпуска версий продукта. Поэтому в команде имя тега чаще всего присваивают по принципу «git tag version». Например, она может выглядеть так: 

git tag v 1.3

Такие теги делаются быстро и служат по сути просто ярлыками (git label), указывающими на нужные коммиты.

Аннотированный git commit tag дает доступ ко всем связанным метаданным. Он создается с целью общего пользования, так как содержит информацию, нужную всей команде. К тому же аннотированный тег можно подписать и проверить программой шифрования и создания электронных подписей GnuPG. Это обеспечивает дополнительную безопасность. В этом случае также нет особых сложностей в процессе create tag git

При выполнении команды для аннотированного тега используйте флаг -a:

git tag -a v1.3

Далее автоматически открывается текстовый редактор и запрашивает дополнительные данные. Параметр -m добавляет к тегу сообщение (комментарий), например: 

git tag -a v1.3 -m "New release for v1.3"

Убедиться, что тег был создан успешно, можно с помощью -n:

git tag -n

Для того чтобы создать ветку из тега в Git (create branch from tag), используйте следующую команду:

git branch <new-branch-name> <tag-name>

Также стоит упомянуть о еще одном способе создавать tag git – с помощью веб-интерфейса. Например, чтобы выполнить задачу create tag GitHub, на сайте github.com перейдите на главную страницу репозитория. В правой части, возле списка файлов, кликните на Releases. Нажмите на Draft a new release, выберите Choose a tag, введите номер версии своего релиза и нажмите Enter. Затем кликните Create new tag. После этого из выпадающего меню нужно выбрать необходимую ветку. Подробный процесс описан на официальном сайте.

Для процесса создания тега на GitLab (create tag GitLab) инструкция выглядит так:

  1. Перейдите в свой репозиторий.
  2. В меню выберите Repository > Tags.
  3. Добавьте новый тег для версии приложения (например, v.1.3.1).
  4. Создайте для релиза заголовок (Release 1.3.1).
  5. Добавьте описание и комментарии к нему (в случае необходимости).
  6. Кликните Create tag.

Теперь перейдем к описанию и применению различных команд в Git.

Git checkout. Функции и примеры использования

Эту команду часто называют мультизадачной, ведь с ее помощью можно:

  • создавать новую ветку;
  • переключаться на нее;
  • переключаться между тегами и получать версии файлов, на которые указывает тег Git (checkout a tag);

Такая команда создаст новую бранчу и сразу переключит на нее:

git checkout -b <branch-name>

Если вам нужно просто переключиться на ветку, используйте:

git checkout <branch-name>

Рассмотрим подробнее эту команду относительно тегов.

Git checkout a tag

Применимо к Git tag команда checkout не только позволяет переключаться между тегами, но и дает возможность получить все версии файлов этого указателя. Например, вас интересует тег, указывающий на версию v.1.2. Введите:

git checkout v2.0.0

В ответ вы получите примечание о том, что переходите к определенному тегу, а также указание о переводе репозитория в состояние «detached HEAD». Больше о detached HEAD, git checkout, а также о клонировании мы рассказали в этой статье. Начиная с версии Git v.2.23.0 для переключения между тегами и ветками используется команда get switch (tags, branches). Перед выполнением команды убедитесь, что у вас последний список тегов (Git tag list) из удаленного репозитория.

Git tag list

При работе с удаленным репозиторием часто используется команда для просмотра списка имеющихся тегов (list tags Git) git tag. В ответ вы получаете все теги в алфавитном порядке. Тот же результат будет при использовании:

git tag -l

Внести фильтры в поиск поможет параметр -l (в данном случае он обязателен). Например, вы можете настроить поиск тегов с шаблонами:

git tag -l "re*"

получив в ответ приблизительно такое:

v0.10.0re

v0.11.0re

v0.12.0re

v0.13.0re

v0.13.0re1

v0.14.0re

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

Git fetch tags и другие команды

С помощью git fetch ваша машина связывается с основным репозиторием и забирает данные, которых у вас еще нет. Однако слияния или модификации с вашими наработками при этом не происходит. Команда выглядит следующим образом:

git fetch --tags 

Для синхронизации удаленного содержимого с локальным репозиторием используется git pull. Если речь идет о тегах, команда будет такая:

git pull --tags

А вот для того, чтобы отправить свои теги (или другие данные) на удаленный сервер, служит команда git push. При этом она должна содержать слово origin, указывающее на тот самый основной репозиторий. Отправка определенного тега:

git push origin <tagname>

Отправка всех тегов:

git push origin --tags

Еще одна полезная команда – git show. С tags она используется для того, чтобы просмотреть полную информацию об этом теге. Команда git show помимо tags используется также с коммитами, ветками и прочими объектами в Git. Пример. Прописываем команду:

git show v1.3

Получаем в ответ:

tag v1.3

Tagger: Alex Krylov <[email protected]>

Date: Wed October 6 15:36 2021 

Release 1.0

Далее следует по такой же аналогии информация о коммите, его авторе, изменениях и прочем.

А теперь перейдем к не менее важной функции – clone in Git (клонирование).

Clone Git command

Клонирование в Git – процесс создания идентичной копии. Команда git clone используется по отношению к репозиторию. Чтобы клонировать репозиторий на удаленном сервере, используют команду:

git clone user@server:path/to/repo.git

Клонирование локального репозитория:

git clone path/to/repo

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

Git clone. Пример клонирования удаленного репозитория

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

https://github.com/repojs/repo.git

Набираем в командной строке:

git clone https://github.com/repojs/repo.git

В текущем каталоге создается папка repo, где и будут все файлы проекта. Скрытая папка .git (здесь же) будет содержать сам репозиторий и всю информацию. Также можно выполнить действие clone in Git в другую папку:

git clone https://github.com/repojs/repo.git repo-1

Здесь repo-1 – это имя необходимой папки.

Но кроме репозитория clone git command применяют относительно веток и тегов.

Git clone tags

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

git clone -b <tagname> <repository-url>

Однако при клонировании тега важно помнить, что вероятнее всего он будет в отключенном состоянии HEAD (detached HEAD). А это значит, что для сохранения любой работы нужна новая ветка. Об этом система обязательно предупреждает соответствующим сообщением.

Если вам нужно клонировать определенный тег, то можно использовать функцию –single branch (подробнее о ней ниже):

git clone -b <tagname> –single-branch <repository-url>

Git clone branch

Команда clone с branch используется в тех случаях, когда необходимо клонировать только одну ветку из репозитория.

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

Добиться цели, выполняя в Git clone remote branch, можно двумя способами:

  • клонировать репозиторий, извлечь все ветки и тут же указать определенную ветку;
  • клонировать репозиторий, сразу указывая нужную бранчу.

В первом случае команда будет выглядеть так:

git clone --branch <branchname> <remote-repo-url>

Либо —branch можно заменить на –b:

git clone -b <branchname> <remote-repo-url>

Второй вариант:

git clone --branch <branchname> --single-branch <remote-repo-url>

или:

git clone -b <branchname> --single-branch <remote-repo-url>

В первом случае вам все равно приходится тянуть все ветки репозитория. А конкретную ветку вы просто выделяете для дальнейшего применения команд git push и git pull. Тем не менее это не решает проблему с потраченными ресурсами.

Второй вариант как раз позволяет вытащить конкретные файлы. Но опция –single branch доступна, начиная с версии Git 1.7.10.

Git clone all branches

Процесс клонирования репозитория как раз предполагает то, что вы загрузите все данные, содержащиеся в нем, включая все ветки. Поэтому понятие «git clone all branches» равно «git clone repository». Команда выглядит так же, как мы описывали выше:

git clone <repository>

А чтобы обновить локальную рабочую копию и получить новые данные, будем использовать уже знакомую команду git pull (с all branches).

Git pull all branches

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

git pull -all

Сначала она запустит git fetch для проверки и извлечения тех самых изменений, а затем изменит наши локальные файлы.

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

error: Контент защищен.