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

Tgr*_*Tgr 13 git github git-push

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

所以问题是,如何识别推动力量的用户?我拉的时候看到这样的东西:

# git pull --prune
(.....)
 + 4c0d44c...138b9ed master     -> origin/master  (forced update)
Run Code Online (Sandbox Code Playgroud)

138b9ed它只是源头/主人的最新提交,并且任何人都可能在强制推动后做出承诺; 甚至可能是推力器本人没有做出任何改变,只是重新定位,所以他的名字甚至不存在于作为作者的原始/主人历史的重写部分.

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

有没有可靠的方法来找出推动起源的人(何时)?

Nev*_*nel 13

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

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

编辑:有效负载也有一个布尔forced键,告诉你是否--force按下了偶数.它没有在Github的示例有效负载中显示[截至2013-07-06],但在另一个示例中可见.

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


Von*_*onC 6

正如 GitHub刚刚在 twitter提到的

让力量(推)与你同在。

严重地。
继续,强制推送到那个分支

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

博客文章“强制推送时间线事件”提到:

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

单击“强制推送”链接将显示两个提交之间的两点比较

  • 如果分支不在拉取请求中怎么办? (2认同)