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


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

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

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

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

我也试过了 git reflog origin/master,但它只是提供相同的信息:有一个记录说 git pull --prune (forced update) 使用提交ID 138b9ed,但这将再次让最后的提交者进入主人,而不是那个做出推力的人。运行 git reflog master 在原始服务器上可能会有所帮助,但GitHub并没有给你那种访问AFAIK。

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


10644
2017-07-06 13:01


起源



答案:


你可以添加一个 网络挂接 到您的Github存储库并让它将推送通知提交给某些服务器或类似的服务 requestb.in

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

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

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


11
2017-07-06 13:05



所以基本上我会检查是否 before 是...的祖先 after 在里面 收到webhook后 有效载荷,如果不是,那是一种推力? - Tgr
是(+1),...要么回答,要么使用测谎仪;)如同 stackoverflow.com/a/15030429/6309。 - VonC
@Tgr,有效载荷有一个 forced 告诉你是否强制推送的键;) - Nevik Rehnel
@NevikRehnel一个链接没有 forced 键。我在看错了钩子吗? - Tgr
@Tgr:它没有出现在github示例有效负载中。你可以看到它 另一个例子 - Nevik Rehnel


答案:


你可以添加一个 网络挂接 到您的Github存储库并让它将推送通知提交给某些服务器或类似的服务 requestb.in

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

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

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


11
2017-07-06 13:05



所以基本上我会检查是否 before 是...的祖先 after 在里面 收到webhook后 有效载荷,如果不是,那是一种推力? - Tgr
是(+1),...要么回答,要么使用测谎仪;)如同 stackoverflow.com/a/15030429/6309。 - VonC
@Tgr,有效载荷有一个 forced 告诉你是否强制推送的键;) - Nevik Rehnel
@NevikRehnel一个链接没有 forced 键。我在看错了钩子吗? - Tgr
@Tgr:它没有出现在github示例有效负载中。你可以看到它 另一个例子 - Nevik Rehnel