在我们的项目(在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。
有没有可靠的方法来找出推动源自谁(何时)?
你可以添加一个 网络挂接 到您的Github存储库并让它将推送通知提交给某些服务器或类似的服务 requestb.in。
通知有效负载有一个 pusher
key,用于标识用于推送更新的Github用户帐户。这样你就能识别出“坏人”。
编辑:有效负载也有一个布尔值 forced
键,告诉你是否是偶数 --force
推或不。它是 没有显示 在Github的示例有效载荷中 [截至2013-07-06],但可见 另一个例子。
编辑:这是唯一可能的,因为Github是一个集成解决方案,可识别推送器并在webhook有效负载中提供该信息。使用纯Git服务器(例如仅使用SSH进行授权)或使用不同的Git服务解决方案(Gitolite,Gitlab等),这可能是不可能的。 Git本身无法识别推送的用户(Git只在提交和标记对象中保存用户信息),因此该信息必须由连接的标识和授权部分提供(这可以是SSH或HTTPS或类似;它也可以完全丢失,例如当本地推送到同一文件系统上的repo时)。
你可以添加一个 网络挂接 到您的Github存储库并让它将推送通知提交给某些服务器或类似的服务 requestb.in。
通知有效负载有一个 pusher
key,用于标识用于推送更新的Github用户帐户。这样你就能识别出“坏人”。
编辑:有效负载也有一个布尔值 forced
键,告诉你是否是偶数 --force
推或不。它是 没有显示 在Github的示例有效载荷中 [截至2013-07-06],但可见 另一个例子。
编辑:这是唯一可能的,因为Github是一个集成解决方案,可识别推送器并在webhook有效负载中提供该信息。使用纯Git服务器(例如仅使用SSH进行授权)或使用不同的Git服务解决方案(Gitolite,Gitlab等),这可能是不可能的。 Git本身无法识别推送的用户(Git只在提交和标记对象中保存用户信息),因此该信息必须由连接的标识和授权部分提供(这可以是SSH或HTTPS或类似;它也可以完全丢失,例如当本地推送到同一文件系统上的repo时)。