Git: отправка тегов в удаленное репо

Если вы использовали Git в течение значительного количества времени, вы, вероятно, уже знаете, как отправить свои коммиты из локальной ветки в удаленный репозиторий. Но, как вы, возможно, знаете, Git не только отслеживает коммиты, но и другие объекты / ссылки, например теги. Эти теги, которые указывают на определенное место в истории репо, также могут быть отправлены в удаленные репозитории, чтобы другие разработчики могли использовать или ссылаться на них. Теги можно использовать для многих вещей, но наиболее часто я вижу вариант использования тегов.

Если вы использовали Git в течение значительного количества времени, вы, вероятно, уже знаете, как отправить свои коммиты из локальной ветки в удаленный репозиторий. Но, как вы, возможно, знаете, Git не только отслеживает коммиты, но и другие объекты / ссылки, например теги.

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

Чтобы отправить их в удаленное репо, у вас есть несколько вариантов:

 $ git push <repo-name> <tag-name> 

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

Другой способ - отправить все теги в удаленное репо:

 $ git push --tags <repo-name> 

Этот способ не рекомендуется, потому что у разработчиков обычно есть старые или «плохие» теги в своих локальных репозиториях, которым нет необходимости находиться в удаленном, поэтому рекомендуется только когда-либо явно вставлять тег, используя первый метод, а не все ваши теги сразу.

Но что, если вам нужно переместить тег в другой коммит? Обычно это происходит, когда вы случайно помечаете неправильную фиксацию или если вы забыли объединить изменения в мастер перед тем, как пометить. В этом случае вам нужно сделать следующее:

  • Удалить тег из удаленного репо
  • Переместите тег в правильную фиксацию
  • Отправьте тег в удаленное репо

С точки зрения команд Git, эта последовательность будет выглядеть так:

 $ git push <repo-name> :refs/tags/<tag-name> 
 $ git tag -fa <tag-name> <commit-hash> 
 $ git push -f <repo-name> <tag-name> 

-f является сокращением для --force , которое, например, отключает определенные проверки и позволяет изменять ссылки.

Вы также можете опустить аргумент <commit-hash> git tag если вы помечаете самую последнюю фиксацию. Лично я предпочитаю четко указывать свои команды тегов, чтобы всегда точно знать, что я помечаю, но вы должны делать то, что лучше всего подходит для вас.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus