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

时间:2013-07-06 13:01:22

标签: git github git-push

在我们的项目(在GitHub上托管)中,有人不小心偶尔用力推动主人。没有人知道是否这样做,我想知道是谁做的,以及背后有什么样的错误配置工具或坏习惯。

所以问题是,如何识别推动力的用户?当我拉,我看到这样的事情:

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

138b9ed只是origin / master中的最新提交,任何人都可能在强制推送后提交;甚至有可能的是,推力者自己没有做任何事情,只是重新定位,所以他的名字甚至不存在于作为作者的原创/主人历史的重写部分。

我也尝试了git reflog origin/master,但它只是提供了相同的信息:有一条记录说git pull --prune (forced update),提交标识为138b9ed,但这会再次将最后一个提交者提供给主而不是那个推力的人。在源服务器上运行git reflog master可能会有所帮助,但GitHub不会为您提供那种访问AFAIK。

是否有任何可靠的方法可以找出推送源自谁(何时)?

2 个答案:

答案 0 :(得分:12)

您可以向Github存储库添加webhook,并将推送通知提交给某个服务器或requestb.in等服务。

通知有效负载具有pusher密钥,用于标识用于推送更新的Github用户帐户。这样你就能识别出“坏人”。

编辑:有效负载还有一个布尔forced键,用于告诉您偶数是否被--force推送。在Github的示例有效负载 [截至2013-07-06] 未显示,但在this other example中可见。

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

答案 1 :(得分:1)

作为GitHub just mentioned on twitter

  

让力量(推动)与您同在。

     

认真。
  继续,强行推到那个分支

https://pbs.twimg.com/media/DsJIVxtU4AAreMW.jpg:large

博客文章“ Force push timeline event”中提到:

  

当您强制推送到分支时, GitHub现在在您的拉取请求的“对话”时间轴中显示强制推送事件

     

点击“强制按下”链接将在两次提交之间显示two dot comparison