Тегами в git-репозитории можно отмечать коммиты или, в общем случае, любые объекты. В нашей команде мы отмечаем тегами релизы, которые уходят в продакшин.
Создание тега
Помечаем локальный коммит
git tag 12345
Отправляем его во внешний репозиторий
git push origin 12345
Удаление тега из репозитория
Удаляем тег локально
git tag -d 12345
Удаляем его во внешнем репозитории
git push origin :refs/tags/12345
Оповещаем каким-либо способом коллег, чтобы они сделали у себя команду
git fetch --tags
Без оповещения нельзя обойтись из-за того, что положение тега в локальном репозитории не синхронизируется автоматически в внешним репозиторием. Это можно сделать только явно выполнив соответствующую команду.
Перемещение тега на другой коммит
Принудительно перезаписываем тег
git tag -f 12345
Отправляем во внешний репозиторий с принудительной перезаписью
git push --force origin 12345
Оповещаем коллег как и в случае удаления тега.
Дополнение
Если не указан хеш-код объекта, то теггируется последний коммит в активном бранче. Чтобы отметить тегом произвольный коммит нужно последним аргументом передать весь его хеш-код.
git tag 12345 6ff87c4664981e4397625791c8ea3bbb5f2279a3
Отправить во внешний репозиторий все теги текущей ветки можно одной командой.
git push --tags
Коментарии к заметке
А у нас теги автоматически создаются после каждого деплоя на продакшин и стейджинг. Capistrano сильно выручает.
У нас для деплоя используется самописный скрипт, куда эти команды тоже можно встроить. Правда всем лень, наверное, ещё чуть-чуть автоматизировать процесс.
Привет, подскажи, пожалуйста, как вы hot-fix выпускаете, после того, как в продакшен код ушел.
Привет, Саша.
Если дефекты были замечены сразу после релиза, то релиз просто «закатывается» назад. Объединяющий коммит удаляется из ветки
master
и разработчик продолжает пилить фичу в ветке.Когда дефект был обнаружен спустя какое-то время и откатить на предыдущий билд уже не получается легко и просто, то все исправления делаются в отдельных ветках, которые сразу мерджатся в мастер.
Чтобы такая схема релизов работала, нужно иметь возможность быстро вернуть предыдыщую версию и выпускать фичи по одной (или хотябы маленькими порциями).