Показать, кто удалил тег 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 при нажатии, но я сомневаюсь, что он зарегистрирует удаление тега.
Вы можете отключить удаление тега при нажатии (и это хорошая идея): Отключить удаление тегов