1

Github Data Challenge へのエントリに取り組み、一連の PushEvents を分析しようとしていますが、奇妙な (?) 結果が得られます。

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

誰かが 1 日で 7,000 件以上のコミットを行っているのを見ました。私が通り抜けて印刷するとき

event["payload"]["shas"]

印刷された結果はすべて基本的に同じです。

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

PushEvent に関連付けられたコミット メッセージは「'git notes add' によって追加されたメモ」であると推測されますが、これは正しいように見えますか? それとも、ここでいくつかのデータを読み違えていますか?

4

1 に答える 1

0

これはかなり古い質問であることは知っていますが、今日これにぶつかりました。「本質的に同じ」とはどういう意味ですか? その最後のブール値はそれらすべてで真ですか?

私が間違っていなければ (そして私は... このアーカイブ ダンプの形式に関する多くのドキュメントを見つけていない可能性があります)、最後のブール値は、そのコミット SHA がその特定のプッシュで一意である場合 (つまり、その特定のコミットがそのリポジトリではまだ見られていません)。SHA とメッセージが同じである可能性があり、すべてが複数回プッシュされる可能性がありますが、ブール値が true に設定されているのはそのうちの 1 つだけです。

Git は分散されており、ユーザーのコミットを確認するためにマージしているだけなので、コミット SHA に基づいて一意のチェックを行うか、単純に「true」フラグの数をコミット数としてカウントすることをお勧めします。リポジトリの履歴全体でフォークとブランチが開いたり閉じたりマージしたりすると、同じ SHA が PushEvents に数回表示されます。

補足として、「Jenkins」という名前は、それが継続的インテグレーション システム ( http://jenkins-ci.org/ ) によって行われたコミットであることを示しているため、これらの 7k の生成にはバグや自動化されたタスクが含まれている可能性があります。繰り返されるコミット メッセージ。

于 2013-08-02T20:14:05.583 に答える