17

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

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

有人删除了标签。你如何找到删除了 git 标签?

4

3 回答 3

8

您有两种类型的标签:

  • 轻的
  • 带注释的

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

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

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

于 2013-09-05T12:53:06.573 回答
5

按照这个关于恢复已删除标签的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:当垃圾收集运行时,这些无法访问的提交将在一定期限后消失。

于 2013-09-05T11:39:09.587 回答
1

Git 并没有真正记录推送期间发生的事情。这篇文章git: 如何查看由于推送而发生的变化?, 建议在推送时更新 reflog,但我怀疑它会记录标签删除。

您可以在推送时禁用标签删除(这是个好主意):禁用标签删除

于 2013-09-05T13:22:53.960 回答