2012-05-14 9 views
21

Independientemente del proyecto, me gustaría saber si hay una manera fácil de obtener todas las confirmaciones para todos los repositorios públicos para un único nombre de usuario.Cómo obtener todas las confirmaciones públicas de github de un usuario

Como pertenezco a varias organizaciones, intento compilar una lista de los proyectos de los que soy colaborador, así como proyectos en los que he aceptado solicitudes de extracción.

Hasta ahora mi google-fu y mirando a través de github api docs ha demostrado ser insuficiente.

Respuesta

16

http://zmoazeni.github.com/gitspective/ es tu amigo. :-) Filtra todo excepto "Empujar", y tienes tu vista, aunque sin el trabajo de codificación para implementarlo tú primero.

Inspeccionar qué ocurre con la pestaña "Red" de Chrome Devtools podría ayudarlo a imitar las consultas API, si desea rehacer el trabajo usted mismo.

+5

Esto no es para las ** contribuciones **. Solo muestra todo este año para mí, no desde 2011. –

1

Sé que esta pregunta es bastante antigua, pero terminé codificando mi propia solución para esto.

Al final, la solución es encontrar todos los repositorios potenciales donde el usuario contribuyó utilizando los servicios organization_repositories y list_repositories (estoy usando octokit).

Luego encontramos todas las ramas activas (servicio branches) en estos repositorios y para cada una de ellas solo encontramos las confirmaciones de nuestro usuario (servicio commits).

El código de ejemplo es un poco extensa, pero se puede encontrar here

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

esto solo muestra compromisos con los repos de la organización de la que forma parte, más sus repositorios. no muestra repositorios de código abierto para orgs de los que no eres parte, pero con los que te has comprometido. – user1130176

+0

Buen punto. Edité para que quede claro en la respuesta. –

9

La forma correcta de hacerlo es a través de la Events API.

Primero debe fetch the user's events:

GET /users/:username/events 

, entonces tendrá que filtrar la matriz de respuesta de artículos where type is set to PushEvent. Cada uno de estos elementos corresponde a un git push por parte del usuario. Las confirmaciones de esa inserción están disponibles en orden cronológico inverso en la matriz payload.commits.

El siguiente paso es filtrar confirmaciones hechas por otros usuarios marcando la propiedad author.email de cada objeto de confirmación. También tiene acceso a propiedades como sha, message y url en el mismo objeto, y puede eliminar confirmaciones duplicadas en varios intentos mediante la propiedad distinct.

EDITAR: Según lo señalado por Adam Taylor en los comentarios, este enfoque es incorrecto. No pude RTFM, lo siento. La API te permite buscar como máximo 300 eventos y los eventos también están limitados a los últimos 90 días. Dejaré la respuesta aquí para que esté completa, pero para la cuestión establecida de obtener todos los commits, no funcionará.

+0

¡Buena respuesta!Lástima que sea tan tarde o de lo contrario sería superior – theEpsilon

+1

Algunas notas importantes de [esta página] (https://developer.github.com/v3/activity/events/): Soporte de eventos [paginación] (https: // desarrollador .github.com/v3/# pagination), sin embargo, la opción 'per_page' no es compatible. El tamaño de página fijo es de 30 elementos. Se admite la obtención de hasta diez páginas, para un total de 300 eventos. Solo los eventos creados dentro de los últimos 90 días se incluirán en los cronogramas. No se incluirán los eventos anteriores a los 90 días (incluso si el número total de eventos en la línea de tiempo es menor a 300). –

+0

Funciona maravillosamente para mis necesidades ... ¡¡Gracias !!! –

Cuestiones relacionadas