2012-05-14 16 views
21

Indipendentemente dal progetto, mi piacerebbe sapere se esiste un modo semplice per ottenere tutti i commit su tutti i repository pubblici per un singolo nome utente.Come ottenere il commit di tutto il github pubblico di un utente

Dal momento che appartengo a più organizzazioni, sto cercando di compilare un elenco dei progetti su cui sono un contributore, nonché i progetti che ho accettato di richieste di pull.

Finora il mio google-fu e guardando attraverso i github api docs si è rivelato insufficiente.

risposta

16

http://zmoazeni.github.com/gitspective/ è tuo amico. :-) Filtra tutto tranne "Push", e hai il tuo punto di vista, anche se senza il lavoro di codifica per implementare te stesso prima.

Ispezionare ciò che accade con la scheda "Rete" di Chrome Devtools potrebbe aiutarti a simulare le query dell'API, se desideri ripetere da solo il lavoro.

+5

Questo non è per ** tutti ** i contributi. Mostra solo tutto quest'anno per me, non dal 2011. –

1

So che questa domanda è piuttosto vecchia, ma ho finito per codificare la mia soluzione a questo.

Alla fine la soluzione è trovare tutti i potenziali repository in cui l'utente ha contribuito utilizzando i servizi organization_repositories e list_repositories (sto usando octokit).

Quindi troviamo tutti i rami attivi (servizio branches) su questi repository e per ognuno di essi trovano solo i commit dal nostro utente (servizio commits).

Il codice di esempio è un po 'ampia, ma si possono trovare here

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

questo mostra solo commit a repository di cui fai parte l'organizzazione più i tuoi repository. non mostra repository open source per organizzazioni di cui non fai parte, ma a cui ti sei impegnato. – user1130176

+0

Buon punto. Ho modificato così rimane chiaro nella risposta. –

9

Il modo corretto per farlo è tramite il Events API.

Prima di tutto bisogna fetch the user's events:

GET /users/:username/events 

poi si vuole filtrare la matrice di risposta per gli elementi where type is set to PushEvent. Ognuno di questi articoli corrisponde ad un git push dall'utente. I commit da quella pressione sono disponibili in ordine cronologico inverso nell'array payload.commits.

Il passaggio successivo consiste nel filtrare i commit effettuati da altri utenti controllando la proprietà author.email di ciascun oggetto di commit. È inoltre possibile accedere a proprietà come sha, message e url sullo stesso oggetto ed è possibile eliminare i commit duplicati su più push utilizzando la proprietà distinct.

MODIFICA: Come indicato da Adam Taylor nei commenti, questo approccio è errato. Non sono riuscito a RTFM, mi dispiace. L'API ti consente di recuperare al massimo 300 eventi ed eventi sono anche limitati agli ultimi 90 giorni. Lascerò qui la risposta per completezza ma per la domanda dichiarata di recupero di tutte le commit, non funzionerà.

+0

Bella risposta!Peccato che sia così tardi, altrimenti sarebbe il massimo – theEpsilon

+1

Alcune note importanti da [questa pagina] (https://developer.github.com/v3/activity/events/): Supporto eventi [paginazione] (https: // developer .github.com/v3/# paginazione), tuttavia l'opzione 'per_page' non è supportata. La dimensione della pagina fissa è di 30 elementi. È supportato il recupero fino a dieci pagine, per un totale di 300 eventi. Solo gli eventi creati negli ultimi 90 giorni saranno inclusi nelle timeline. Gli eventi più vecchi di 90 giorni non saranno inclusi (anche se il numero totale di eventi nella timeline è inferiore a 300). –

+0

Funziona meravigliosamente per i miei bisogni ... grazie !!! –

Problemi correlati