在 github 上查找强制推送的提交者

2024-05-08

在我们的项目(托管在 GitHub 上)中,每隔一段时间就会有人意外强制推送 master。没有人知道是否这样做,我想找出是谁干的,以及背后有什么样的错误配置的工具或坏习惯。

那么问题来了,如何识别进行强制推送的用户呢?当我拉动时,我看到这样的东西:

# git pull --prune
(.....)
 + 4c0d44c...138b9ed master     -> origin/master  (forced update)

but 138b9ed只是 origin/master 中的最新提交,任何人都可能在强制推送后提交;甚至有可能原力推动者本人并没有做任何事情,只是重新设定了基础,所以他的名字甚至没有出现在作为作者的起源/主人历史的重写部分中。

我也尝试过git reflog origin/master,但它只提供相同的信息:有一个记录说git pull --prune (forced update)与提交 ID138b9ed,但这将再次将最后一个提交者变为 master,而不是进行强制推送的提交者。跑步git reflog master在源服务器上可能会有所帮助,但 GitHub 不会为您提供这种访问权限。

有没有可靠的方法可以找出推送的来源(以及何时)?


您可以添加一个webhook https://help.github.com/articles/post-receive-hooks到你的 Github 存储库并让它将推送通知提交到某些服务器或服务,例如请求b.in http://requestb.in.

通知有效负载有一个pusherkey 标识用于推送更新的 Github 用户帐户。这样你应该能够识别出“坏人”。

Edit: The payload also has a boolean forced key, which tells you if the even was --force pushed or not. It is not shown in Github's example payload [as of 2013-07-06], but visible in this other example https://gist.github.com/nevik/5939946.

编辑:这之所以可能,是因为 Github 是一个集成解决方案,可以识别推送器并在 Webhook 有效负载中提供该信息。使用纯 Git 服务器(例如仅使用 SSH 进行授权)或不同的 Git 服务解决方案(Gitolite、Gitlab 等),这可能是不可能的。 Git 本身无法识别推送的用户(Git 只在 commit 和 tag 对象中保存用户信息),因此该信息必须由连接的识别和授权部分提供(可以是 SSH 或 HTTPS 等) ;它也可能完全丢失,例如当本地推送到同一文件系统上的存储库时)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 github 上查找强制推送的提交者 的相关文章

随机推荐