2012-05-14 13 views
21

プロジェクトに関係なく、単一のユーザー名に対してすべてのパブリックリポジトリにすべてのコミットを取得する簡単な方法があるかどうかを知りたいと思います。ユーザーのパブリックgithubをすべて取得する方法

私は複数の組織に所属しているので、私が寄稿者であるプロジェクトのリストと、プルリクエストを受け入れたプロジェクトのリストを作成しようとしています。

これまでの私のgoogle-fuとgithub api docsを見ていると不十分であることが判明しています。

答えて

16

http://zmoazeni.github.com/gitspective/はあなたの友人です。 :-)「プッシュ」以外のすべてを除外し、最初に実装するコーディング作業は必要ありませんが、あなたは自分の見解を持っています。

Chrome Devtoolsの[ネットワーク]タブで何が起きているかを調べることで、自分で作業をやり直す場合にAPIクエリを模倣するのに役立ちます。

+5

これは**すべての**貢献のためではありません。今年は2011年以来、今年すべてのことしか表示されていません。 –

1

私はこの質問がかなり古いことを知っていますが、私はこれに私自身の解決策をコーディングしてしまいました。

最終的には、organization_repositoriesサービスとlist_repositoriesサービス(私はoctokitを使用しています)を使用して、ユーザーが寄稿した可能性のあるすべてのリポジトリを見つけることです。

これらのリポジトリにすべてのアクティブなブランチ(サービスbranches)があり、それぞれについて、ユーザ(サービスcommits)からのコミットのみが見つかります。

サンプルコードは少し広範囲であるが、これを行うための正しい方法はEvents API介しあるhere

OBS: As pointed out, this solution does not consider organizations and repositories where you contributed but are not part of. 
+0

これはあなたがreposの一部であるreposにコミットしています。あなたが参加していないが、あなたがコミットした組織のオープンソースリポジトリは表示されません。 – user1130176

+0

良い点。私は編集して答えにはっきりと残っています。 –

9

見出すことができます。

まず、fetch the user's eventsする必要があります。

GET /users/:username/events 

次にあなたがアイテムwhere type is set to PushEventの応答配列をフィルタリングすることになるでしょう。これらの項目のそれぞれは、ユーザーによるgit pushに対応します。そのプッシュからのコミットは、payload.commits配列の逆の順序で利用できます。

次のステップは、各コミットオブジェクトのauthor.emailプロパティをチェックすることによって他のユーザーが行ったコミットを除外することです。同じオブジェクト上にshamessageurlなどのプロパティにアクセスすることができ、distinctプロパティを使用すると、複数のプッシュで重複したコミットを排除できます。

編集:コメントにはAdam Taylorが指摘したように、このアプローチは間違っています。私はRTFMに失敗しました、申し訳ありません。 APIを使用すると最大300個のイベントを取得でき、イベントも過去90日間に制限されます。私は完全性のために答えを残しておきますが、を取り出すという質問に対しては、すべてがコミットすると動作しません。

+0

ニースの回答!それは遅すぎる、そうでなければトップになるだろう – theEpsilon

+1

[このページ](https://developer.github.com/v3/activity/events/)からのいくつかの重要なメモ:イベントサポート[ページ区切り](https:// developer .github.com/v3 /#pagination)。ただし、per_pageオプションはサポートされていません。固定ページサイズは30項目です。合計300件のイベントに対して、最大10ページのフェッチがサポートされています。過去90日間に作成されたイベントのみがタイムラインに含まれます。 90日を超えるイベントは含まれません(タイムライン内のイベントの合計数が300未満の場合でも)。 –

+0

私のニーズに素晴らしく機能します...ありがとうございます! –