是否可以找到谁从存储库中删除了 git 标签?
假设您有一个包含贡献者的存储库。存储库具有dev
标签和版本:v0.1.0
等v0.1.1
。
有人删除了标签。你如何找到谁删除了 git 标签?
您有两种类型的标签:
轻量级标签只是提交的元数据。他们自己没有作者。说标签的作者是提交的作者是错误的,因为其他任何人都可以用轻量级标签标记该提交。
另一方面,带注释的标签就像提交。这就是为什么带注释的标签在创建它们时也需要一条消息。他们有作者、描述等。
因此,要了解标签的作者,您必须有一个带注释的标签策略。但是,据我所知,没有 git repo 元数据(.git
目录)的历史记录。这意味着您无法知道谁删除了标签/分支/等,除非您的 git 提供程序具有审核/记录/此的机制。
按照这个关于恢复已删除标签的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:当垃圾收集运行时,这些无法访问的提交将在一定期限后消失。
Git 并没有真正记录推送期间发生的事情。这篇文章git: 如何查看由于推送而发生的变化?, 建议在推送时更新 reflog,但我怀疑它会记录标签删除。
您可以在推送时禁用标签删除(这是个好主意):禁用标签删除