Якщо я хочу помітити тег на поточний фіксатор. Я знаю, що працюють обидва наступні командні рядки:
git tag <tagname>
і
git tag -a <tagname> -m '<message>'
Яка різниця між цими командами?
Якщо я хочу помітити тег на поточний фіксатор. Я знаю, що працюють обидва наступні командні рядки:
git tag <tagname>
і
git tag -a <tagname> -m '<message>'
Яка різниця між цими командами?
Відповіді:
Різниця між командами полягає в тому, що одна надає вам тегове повідомлення, а інша - ні. Помічений тег містить повідомлення, яке може відображатися за допомогою 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 вказує безпосередньо на комісію:
git tag light
cat .git/refs/tags/light
друкує те саме, що і SHA-1 HEAD.
Тож недарма вони не можуть містити жодних інших метаданих.
анотовані теги вказують на об’єкт тегів у базі даних об’єктів.
git tag -as -m msg annot
cat .git/refs/tags/annot
містить SHA об'єкта примітки тегу:
c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
і тоді ми можемо отримати його вміст за допомогою:
git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
вибірка вибірки:
object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
type commit
tag annot
tagger Ciro Santilli <your@mail.com> 1411478848 +0200
msg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
<YOUR PGP SIGNATURE>
-----END PGP SIGNAT
Ось так воно містить додаткові метадані. Як ми бачимо з результатів, поля метаданих:
Більш детальний аналіз формату присутній на: Що таке формат об’єкта git tag і як обчислити його SHA?
Бонуси
Визначте, чи тег помічено:
git cat-file -t tag
Виходи
commit
для легкої ваги, оскільки немає тего-об'єкта, він вказує безпосередньо на комітtag
для примітки, оскільки в цьому випадку є об'єкт тегуСписок лише легких тегів: Як я можу перерахувати всі полегшені теги?
Велика різниця прекрасно пояснено тут .
По суті, легкі теги - це лише вказівки на конкретні коміти. Більше ніякої інформації не зберігається ; з іншого боку, помічені теги - це звичайні об'єкти , у яких є автор та дата, і їх можна пересилати, оскільки вони мають власний ключ SHA.
Якщо ви знаєте, хто позначив те, що і коли стосується вас, тоді використовуйте мітки з примітками. Якщо ви просто хочете позначити конкретний момент у вашій розробці , незалежно від того, хто і коли це зробив, то легкі теги є досить хорошими.
Зазвичай ви б хотіли шукати помічені теги, але це справді залежить від майстра проекту Git.