Могут ли git-аннотированные теги изменяться?Если так, то как? - PullRequest
0 голосов
/ 21 сентября 2019

Модификация легких тегов в git работает как задумано.git tag -f <tagname> <commit-id>

Но использование того же тега с аннотированными тегами, похоже, вызывает проблемы -

$ git cat-file -t tag2rag
tag

и

$ git cat-file -p tag2rag
object a7b4b4823f0222b79376e4c16bdbba0f3d1f5d33
type commit
tag tag2rag
tagger samshers <email@gmail.com> 1568930032 +00:00

tag to rag

затем

$ git tag -f tag2rag 3096b
Updated tag 'tag2rag' (was 8931274)

затем неожиданное

$ git cat-file -t tag2rag
commit

и

$ git cat-file -p tag2rag
tree b0053bf300da86e5aeabafb29d7dedcdbf713d51
parent 49c74fafd7c69e938052a4cba96ad62999438413
author samshers <email@gmail.com> 1568910804 +0000
committer samshers <email@gmail.com> 1568910804 +0000

wowfiles in

Отказ от ответственности: хорошо, я признаю, что изменение тегов после публикации не является хорошей практикой и может привести кбольше вопросов сотрудничества.И вместо этого должен быть создан и опубликован новый тег.
Итак, цель здесь - понять git и как делать вещи в git.

Любые предложения по редактированию аннотированных тегов.

1 Ответ

2 голосов
/ 21 сентября 2019

Короткий ответ - нет.

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

Аннотированный тег состоит из облегченного тега - ссылки, котораяначинается с refs/tags/ - это указывает на внутренний объект Git типа tag:

$ git cat-file -t v2.4.0
tag

Базовый объект имеет хеш-идентификатор:

$ git rev-parse v2.4.0
67308bd628c6235dbc1bad60c9ad1f2d27d576cc

Этот хеш-идентификатор представляет собой Git-контрольная сумма стиля объекта (заголовок + содержимое):

$ git cat-file -p v2.4.0 | sed 's/@/ /'
object 3d4a3ffe64162b45ae7c991fc60623ecb4678cfd
type commit
tag v2.4.0
tagger Junio C Hamano <gitster pobox.com> 1430418320 -0700

Git 2.4
-----BEGIN PGP SIGNATURE-----
[snip]

Вы можете создать новый объект тега с другим содержимым (например, используя git tag или git mktag), но если содержимое отличается, поэтомубудет хэш-идентификатор.Затем можно сделать так, чтобы облегченное имя тега указывало на новый объект тега, например, с помощью git update-ref.

Это никак не изменяет существующий объект.Однако наивный пользователь теперь будет некритически проверять тег, не замечая, что имя refs/tags/v2.4.0 создает новый и другой идентификатор объекта тега, считывает новый и другой объект тега и думаю, тег изменился.,(Если идентификатор внутри объекта тега все еще имеет имя v2.4.0, все синхронизировано и, возможно, тег действительно изменился, с некоторых точек зрения!)

Попытка отправить этот новый обновленный тег другомуGit-репозитории могут преуспеть или потерпеть неудачу, в зависимости от их политики замены существующего ref-пространства имен тегов и наличия у них копии предыдущего тега.пара.

...