TLDR без аннотации: зафиксировать; аннотированный: коммит, автор, дата, (необязательно) комментарий
Энтони Хэтчкинс
Ответы:
255
TL; DR
Разница между командами заключается в том, что одна выдает вам сообщение тега, а другая - нет. У аннотированного тега есть сообщение, которое можно отобразить с помощью git-show (1), в то время как тег без аннотаций является просто именованным указателем на коммит.
Подробнее о легких тегах
Согласно документации : «Чтобы создать легкий тег, не указывайте ни один из параметров -a, -s или -m, просто укажите имя тега». Есть также несколько вариантов написания сообщения для аннотированных тегов:
Когда вы используете git tag <tagname>, Git создаст тег в текущей ревизии, но не будет запрашивать аннотацию. Он будет помечен без сообщения (это облегченный тег).
Когда вы используете git tag -a <tagname>, Git предложит вам аннотацию, если вы не использовали флаг -m для предоставления сообщения.
Когда вы используете git tag -a -m <msg> <tagname>, Git помечает коммит и аннотирует его предоставленным сообщением.
Когда вы используете git tag -m <msg> <tagname>, Git будет вести себя так, как будто вы передали флаг -a для аннотации и используете предоставленное сообщение.
По сути, это просто означает, хотите ли вы, чтобы у тега была аннотация и некоторая другая информация, связанная с ним, или нет.
Есть ли разница между тегом «аннотация» и сообщением о коммите?
Стив Беннетт
3
@SteveBennett Да. Аннотация тега не является сообщением фиксации. Вы не можете увидеть это с помощью git-log (1); вам нужно использовать git-show (1).
Тодд А. Джейкобс
115
Разница между «аннотированными» и «легкими» тегами выходит за рамки сообщения. Вы можете иметь аннотированный тег без сообщения ( git tag -a <tag> -m ''), но у аннотированного тега всегда есть тег (автор) и дата .
Петр Финдейзен
1
Мне то же. Теги версий обычно содержат довольно бесполезные сообщения (может ли оно сказать больше, чем название? Зачем?). К сожалению, этот голосующий голос не упоминает эту разницу.
Петр Финдейзен
44
Еще одна важная вещь, которую стоит отметить, это то, что когда вы перемещаете свои теги в удаленное хранилище, используя git push --follow-tagsтолько аннотированные теги.
Xatoo
209
Нажимайте аннотированные метки, сохраняйте вес локальным
man git-tag говорит:
Аннотированные теги предназначены для выпуска, в то время как легкие теги предназначены для меток частных или временных объектов.
И некоторые виды поведения делают различие между ними таким образом, что эта рекомендация полезна, например:
аннотированные теги могут содержать сообщение, создателя и дату, отличную от фиксации, на которую они указывают. Таким образом, вы можете использовать их для описания релиза, не делая релиз релиза.
Легкие теги не имеют такой дополнительной информации и не нуждаются в ней, так как вы будете использовать ее только для разработки.
По сути, легкие теги являются просто указателями на конкретные коммиты. Дальнейшая информация не сохраняется ; с другой стороны, аннотированные теги являются обычными объектами , которые имеют автора и дату, и на них можно ссылаться, поскольку они имеют свой собственный ключ SHA.
Если вы знаете, кто пометил, что и когда для вас актуально, используйте аннотированные теги. если ты просто хотите пометить конкретную точку в своем развитии , независимо от того, кто и когда это сделал, тогда легкие теги достаточно хороши.
Обычно вы бы использовали аннотированные теги, но это действительно зависит от мастера Git проекта.
Ответы:
TL; DR
Разница между командами заключается в том, что одна выдает вам сообщение тега, а другая - нет. У аннотированного тега есть сообщение, которое можно отобразить с помощью git-show (1), в то время как тег без аннотаций является просто именованным указателем на коммит.
Подробнее о легких тегах
Согласно документации : «Чтобы создать легкий тег, не указывайте ни один из параметров -a, -s или -m, просто укажите имя тега». Есть также несколько вариантов написания сообщения для аннотированных тегов:
git tag <tagname>
, Git создаст тег в текущей ревизии, но не будет запрашивать аннотацию. Он будет помечен без сообщения (это облегченный тег).git tag -a <tagname>
, Git предложит вам аннотацию, если вы не использовали флаг -m для предоставления сообщения.git tag -a -m <msg> <tagname>
, Git помечает коммит и аннотирует его предоставленным сообщением.git tag -m <msg> <tagname>
, Git будет вести себя так, как будто вы передали флаг -a для аннотации и используете предоставленное сообщение.По сути, это просто означает, хотите ли вы, чтобы у тега была аннотация и некоторая другая информация, связанная с ним, или нет.
источник
git tag -a <tag> -m ''
), но у аннотированного тега всегда есть тег (автор) и дата .git push --follow-tags
только аннотированные теги.Нажимайте аннотированные метки, сохраняйте вес локальным
man git-tag
говорит:И некоторые виды поведения делают различие между ними таким образом, что эта рекомендация полезна, например:
аннотированные теги могут содержать сообщение, создателя и дату, отличную от фиксации, на которую они указывают. Таким образом, вы можете использовать их для описания релиза, не делая релиз релиза.
Легкие теги не имеют такой дополнительной информации и не нуждаются в ней, так как вы будете использовать ее только для разработки.
git describe
без параметров командной строки видит только аннотированные тегиВнутренние различия
и легкие, и аннотированные теги представляют собой файл, в
.git/refs/tags
котором содержится SHA-1для легких тегов SHA-1 указывает непосредственно на коммит:
печатает так же, как SHA-1 ГОЛОВКИ.
Поэтому неудивительно, что они не могут содержать никаких других метаданных.
аннотированные теги указывают на объект тега в базе данных объекта.
содержит SHA аннотированного тегового объекта:
и тогда мы можем получить его содержимое с:
образец вывода:
И вот как он содержит дополнительные метаданные. Как видно из вывода, поля метаданных:
Более подробный анализ формата представлен на: Что такое формат объекта тега git и как рассчитать его SHA?
Бонусы
Определите, является ли тег аннотированным:
Выходы
commit
для облегченного, так как нет объекта тега, он указывает непосредственно на коммитtag
для аннотированных, так как в этом случае есть объект тегаСписок только легких тегов: Как я могу перечислить все легкие теги?
источник
Большая разница прекрасно объяснено здесь .
По сути, легкие теги являются просто указателями на конкретные коммиты. Дальнейшая информация не сохраняется ; с другой стороны, аннотированные теги являются обычными объектами , которые имеют автора и дату, и на них можно ссылаться, поскольку они имеют свой собственный ключ SHA.
Если вы знаете, кто пометил, что и когда для вас актуально, используйте аннотированные теги. если ты просто хотите пометить конкретную точку в своем развитии , независимо от того, кто и когда это сделал, тогда легкие теги достаточно хороши.
Обычно вы бы использовали аннотированные теги, но это действительно зависит от мастера Git проекта.
источник