查看谁删除了Git标签

17

能否找到删除git存储库中标签的人?

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

某人删除了标记。 您如何找到删除了git标记?


你的代码库访问协议是什么?你有权限在代码库服务器上查看日志吗? - Alexander Yancharuk
我使用 ssh 协议... 我不明白第二个问题。你是指 git log 吗? - Ionică Bizău
默认情况下,检查ssh访问日志需要root访问权限。不,我的意思是在仓库服务器上查看/var/log/auth.log的权限。 - Alexander Yancharuk
@AlexanderYancharuk 我使用Github和Bitbucket作为Git提供商。我该如何查看日志记录...? - Ionică Bizău
在这种情况下,我的解决方案无法帮助... - Alexander Yancharuk
3个回答

8
你有两种标签类型:
轻量级的
注释型的
轻量级标签只是提交的元数据,它们本身没有作者。说标签的作者是提交的作者是错误的,因为其他任何人都可以使用轻量级标签来标记该提交。
另一方面,注释型标签就像提交一样。这就是为什么创建注释型标签时也需要一个消息。它们有作者、描述等信息。
因此,要知道你的标签的作者,你必须有一个注释型标签策略。但据我所知, git 存储库的元数据(.git 目录)没有历史记录。这意味着,除非你的 git 提供程序具有审计/日志机制,否则你无法知道谁删除了标签/分支等。

@CharlesB 在上一个句子中我说的是,这在 Git 中是不可能实现的。 - Gabriel Petrovay

5

根据这个关于恢复已删除标签的git提示,您可以执行以下操作:

git fsck中查找所有不可达标签:

git fsck --unreachable | grep tag

接下来,对输出中的每个提交哈希值运行以下操作:

git show COMMIT_HASH

如果你想要一个列出所有不可达(已删除)标签及其相关人员(标记者)的shell脚本,你可以运行以下命令:

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

编辑:这并没有回答实际问题,但是它告诉你如何查看索引中所有无法访问标签的作者。

更新2:这些无法访问的提交将在垃圾收集运行后的某个到期时间消失。


3
这将找到所有无法访问的标签对象,但并非针对所有标签都创建了标签对象。此外,该显示谁创建了该标签,但问题要求查找删除该标签的人。 - user743382
嗯...这很有趣。为什么不为所有标签创建标记对象呢? - Frost
1
简单的 git tag tag-name 不会创建标签对象,因为没有理由这样做。如果您这样做,将添加一个引用,这就是所需的全部内容。只有在需要存储消息以及不属于提交的标记时,才会使用 git tag -[asu] 创建标记对象,请参阅 git help tag - user743382
@Frost 当我运行第一个命令时,我得到了这个输出:检查对象目录:100%(256/256),完成。检查对象:100%(546/546),完成。 没有提交哈希值... - Ionică Bizău
@Johnツ嗯,如果在阅读了hvd评论后,我发现我的回答实际上并没有回答所问的问题。 - Frost

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接