【问题标题】:Find committer of a force push on github在 github 上查找强制推送的提交者
【发布时间】:2013-07-04 09:41:00
【问题描述】:

在我们的项目(托管在 GitHub 上)中,每隔一段时间就会有人不小心强制推送 master。没有人知道是否这样做,我想知道是谁做的,背后是什么错误配置的工具或坏习惯。

那么问题来了,如何识别强制推送的用户呢?当我拉动时,我会看到如下内容:

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

但138b9ed 只是origin/master 中的最新提交,任何人都可能在强制推送后提交;甚至有可能原力推动者本人并没有做出任何事情,只是重新定位,所以他的名字甚至没有出现在作为作者的起源/大师历史的重写部分中。

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

有没有可靠的方法来找出推送的来源(以及时间)?

【问题讨论】:

  • 您现在可以查看谁强行推送了您的分支(仅在 GitHub 上):请参阅 my answer below

标签: git github git-push


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以基本上我会检查before 是否是post-receive webhook 载荷中after 的祖先,如果不是,它是强制推送吗?
  • 是 (+1), ... 要么回答,要么使用测谎仪 ;) 如stackoverflow.com/a/15030429/6309。
  • @Tgr,payload 有一个forced 键,它告诉你推送是否被强制;)
  • @NevikRehnel 链接的那个没有forced 键。那我是不是看错了钩子?
  • @Tgr:它没有出现在 github 示例有效负载中。你可以在this other example看到它
【解决方案2】:

作为 GitHub just mentioned on twitter

让力量(推)与你同在。

说真的。
来吧,强制推送到那个分支

博文“Force push timeline event”提到:

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

单击“强制推送”链接将在两次提交之间显示two dot comparison。

【讨论】:

  • 如果分支不在拉取请求中怎么办?
  • @donquixote 然后它不会出现,你必须查询推送事件才能找回那些旧的提交,以“穷人 reflog”的方式:stackoverflow.com/a/50515355/6309跨度>
  • 我认为链接的 QA 仅针对本地推送解释了这一点,不适用于 github 上的推送。
  • @donquixote 是的,但链接的 QA 将自身指向 stackoverflow.com/a/28958418/6309
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2016-01-14
  • 2021-07-19
  • 2014-12-24
  • 2012-08-26
  • 2011-04-05
  • 1970-01-01
相关资源
最近更新 更多