Comment obtenir tous les commits GitHub publics d'un utilisateur

Quel que soit le projet, j'aimerais savoir s'il existe un moyen facile d'obtenir tous les commits dans tous les dépôts publics pour un seul nom d'utilisateur.

Puisque j'appartiens à plusieurs organisations, j'essaie de compiler une liste des projets sur lesquels je suis un contributeur, ainsi que des projets que j'ai acceptés pull requests.

Jusqu'à présent, mon google-fu et en regardant à travers les documents de l'api GitHub s'est avéré insuffisant.

24
demandé sur markrickert 2012-05-15 01:01:52

4 réponses

Http://zmoazeni.github.com/gitspective/ est votre ami. :- ) Filtrer tout sauf "Push", et vous avez votre point de vue, mais sans le travail de codage pour l'implémenter vous-même en premier.

Inspecter ce qui se passe avec L'onglet "Réseau" de Chrome Devtools peut vous aider à imiter les requêtes API, si vous voulez refaire le travail vous-même.

17
répondu ecmanaut 2012-05-20 00:53:10

La bonne façon de le faire est via l'API Events .

Vous devez d'Abord récupérer les événements de l'utilisateur:

GET /users/:username/events

Ensuite, vous voudrez filtrer le tableau de réponses pour les éléments type est défini sur PushEvent. Chacun de ces éléments correspond à un git push par l'utilisateur. Les commits de ce push sont disponibles dans l'ordre chronologique inverse dans le tableau payload.commits.

L'étape suivante consiste à filtrer les validations effectuées par d'autres utilisateurs en vérifiant author.email propriété de chaque objet commit. Vous avez également accès à des propriétés telles que sha, message et url sur le même objet, et vous pouvez éliminer les commits en double sur plusieurs poussées en utilisant la propriété distinct.

EDIT:, Comme l'a souligné Adam Taylor dans les commentaires, cette approche est erronée. Je n'ai pas réussi à RTFM, désolé. L'API vous permet de récupérer au plus 300 événements et les événements sont également limités aux 90 derniers jours. Je vais laisser la réponse ici pour l'exhaustivité mais pour le question posée de récupérer tous les commits , cela ne fonctionnera pas.

11
répondu Phil Booth 2017-05-23 11:47:28

J'aimerais savoir s'il existe un moyen facile d'obtenir tous les commits sur tous les dépôts publics pour un seul nom d'utilisateur.

Le premier défi consiste à lister Tous les repos auxquels un utilisateur a déjà contribué. Comme souligné par d'autres, L'API officielle ne vous permettra pas d'obtenir cette information depuis le début des temps.

Vous pouvez toujours obtenir ces informations en interrogeant des pages non officielles et en les analysant dans un boucle:

(Avertissement: Je suis le responsable.)

C'est exactement ce que github-contribs fait pour vous:

$ sudo npm install -g @ghuser/github-contribs
$ github-contribs AurelienLourot
✔ Fetched first day at GitHub: 2015-04-04.
⚠ Be patient. The whole process might take up to an hour... Consider using --since and/or --until
✔ Fetched all commits and PRs.
35 repo(s) found:
AurelienLourot/lsankidb
reframejs/reframe
dracula/gitk
...
4
répondu Aurelien 2018-06-12 08:47:49

Je sais que cette question est assez ancienne, mais j'ai fini par coder ma propre solution à cela.

En fin de compte, la solution consiste à trouver tous les dépôts potentiels où l'Utilisateur a contribué en utilisant les services organization_repositories et list_repositories (j'utilise octokit).

Ensuite, nous trouvons toutes les branches actives (service branches) sur ces dépôts et pour chacune d'elles ne trouvons que les commits de notre Utilisateur (service commits).

L'exemple de code est un peu étendu, mais peut être trouvé ici

OBS: As pointed out, this solution does not consider organizations and repositories where you contributed but are not part of.
1
répondu Fabricio Buzeto 2015-02-28 14:02:29