看看谁删除了git标签

时间:2013-09-05 11:23:53

标签: git git-tag

是否可以找到谁从存储库中删除了git标签?

假设您有一个包含贡献者的存储库。存储库具有dev标记和版本:v0.1.0v0.1.1等。

有人删除了一个标签。您如何找到删除了git标签?

3 个答案:

答案 0 :(得分:6)

您有两种类型的标签:

  • 轻质
  • 注释

轻量级标记只是提交的元数据。他们自己没有作者。说标签的作者是提交的作者是错误的,因为其他任何人都可以用轻量级标签标记该提交。

另一方面,带注释的标签就像提交一样。这就是为什么带注释的标签在创建它们时也需要一条消息。他们有作者,描述等。

因此,要了解标记的作者,您必须拥有带注释的标记策略。但是,据我所知,没有git repo元数据(.git目录)的历史记录。这意味着您无法知道谁删除了标记/分支/ etc,除非您的git提供程序具有审计/记录/此的机制。

答案 1 :(得分:5)

关于restoring deleted tags的git提示,您可以执行以下操作:

git fsck中找到所有无法访问的标记:

git fsck --unreachable | grep tag

然后,对于输出中的每个提交哈希,运行

git show COMMIT_HASH

如果你想要一个shell脚本列出所有无法访问(删除)的标签和相关人员(Tagger),你可以运行以下命令:

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

编辑:这不能回答实际提出的问题,但它会告诉您如何查看索引中所有无法访问的标记的作者。

答案 2 :(得分:1)

Git并没有真正记录推送过程中发生的事情。这篇文章git: how to see changes due to push?表明reflog是在推送时更新的,但我怀疑它会记录标签删除。

你可以在推送时禁用标签删除(这是一个好主意):Disable tag deletion