1

我正在尝试参加 Github 数据挑战赛,我正在尝试分析一组 PushEvent,但我得到了一些奇怪的(?)结果。

users = Hash.new(0)
(0..23).each do |hour|
    gz = open("http://data.githubarchive.org/2013-04-01-#{hour}.json.gz")
    js = Zlib::GzipReader.new(gz).read
    Yajl::Parser.parse(js) do |event|
        if event["type"] == "PushEvent" && event["actor_attributes"] && event["actor_attributes"]["login"]
            users[event["actor_attributes"]["login"]] += 1
        end
    end
end

该脚本可以正常工作,但是当我通过以下方式查看一个人所做的最多提交时

users.values.max

我看到有人在一天内提交了超过 7k 次提交。当我通过并打印出来时

event["payload"]["shas"]

所有打印结果基本相同:

585a2f02f36da9ee0625a42aa2d5e98836c8a2de
danil@orionet.ru
Notes added by 'git notes add'
Jenkins
true

我假设与 PushEvent 关联的提交消息是“由 'git notes add' 添加的注释”,所以这看起来对吗?还是我在这里误读了一些数据?

4

1 回答 1

0

我知道这是一个很老的问题,但我今天才碰到这个问题。当您说“基本相同”时……这是什么意思?最后一个布尔值在所有这些中都是真的吗?

因为如果我没记错的话(而且我可能......没有找到太多关于这个归档转储格式的文档)最后一个布尔值应该是如果那个提交 SHA 在那个特定的 Push 上是唯一的(意思是如果那个特定的提交尚未在该存储库中看到)。可能是相同的 SHA 和消息,并且都可以推送多次,但只有其中一个应该将该布尔值设置为 true。

因为 Git 是分布式的,而您只是合并以查看一个人的提交,我建议根据提交 SHA 进行唯一检查,或者简单地将 'true' 标志的数量计算为提交的数量。相同的 SHA 将在 PushEvents 中多次出现,因为在存储库的整个历史中,分叉和分支打开和关闭/合并。

作为旁注,“Jenkins”这个名字告诉你这是一个持续集成系统(http://jenkins-ci.org/)所做的提交,所以在生成这些 7k 时可能存在错误或自动化任务重复提交消息。

于 2013-08-02T20:14:05.583 回答