Показать, кто удалил тег git

Можно ли найти, кто удалил тег git из репозитория?

Предположим, у вас есть репозиторий с вкладчиками. Репозиторий имеет тег dev и версии: v0.1.0, v0.1.1 и т.д.

Кто-то удаляет тег. Как вы нашли , кто удалил тег git?

Ответы

Ответ 1

У вас есть два типа тегов:

  • легкий
  • аннотированный

Легкие теги - это только метаданные для фиксации. У них нет автора. Сказать, что автор тега является автором коммита, неверен, поскольку кто-то еще мог помечать этот фиксатор легким тегом.

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

Итак, чтобы знать авторов ваших тегов, у вас должна быть аннотированная политика тегов. Но из того, что я знаю, нет истории метаданных git repo (.git). Это означает, что вы не можете знать, кто удалил тег/ветку/etc, если только ваш поставщик git не имеет механизма для аудита/журнала/этого.

Ответ 2

После этого git отзыв о восстановлении удаленных тегов вы можете сделать следующее:

Найти все недостижимые теги в git fsck:

git fsck --unreachable | grep tag

И затем, для каждого хеш-сообщения на выходе, запустите

git show COMMIT_HASH

Если вы хотите, чтобы оболочка script отображала все недостижимые (удаленные) теги с соответствующим человеком (Tagger), вы можете запустить следующую команду:

for commit in `git fsck --unreachable | grep tag | awk '{ print $3 }'`; do 
   git show $commit | grep -E "^(tag|Tagger)"; 
done

EDIT: это не отвечает на заданный вопрос, но в нем рассказывается, как видеть авторов всех недостижимых тегов в индексе.

Ответ 3

Git не регистрирует то, что происходит во время нажатия. Этот пост git: как видеть изменения из-за push?, предлагает обновить reflog при нажатии, но я сомневаюсь, что он зарегистрирует удаление тега.

Вы можете отключить удаление тега при нажатии (и это хорошая идея): Отключить удаление тегов