在我们的项目(在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。
是否有任何可靠的方法可以找出推送源自谁(何时)?
答案 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
让力量(推动)与您同在。
认真。
继续,强行推到那个分支
博客文章“ Force push timeline event”中提到:
当您强制推送到分支时, GitHub现在在您的拉取请求的“对话”时间轴中显示强制推送事件。
点击“强制按下”链接将在两次提交之间显示two dot comparison。