2012-04-20 17 views
7

Ho pensato che sarebbe stato utile prendere un repository Git, eseguire alcuni script e generare il numero di righe nel code base e la proporzione di ogni autore che ha contribuito ad esso.Determinazione della distribuzione del codice corrente per autore

Fondamentalmente, poiché sono una specie di codificatore competitivo, vorrei una metrica personale per verificare se il numero di righe che ho scritto (nell'attuale HEAD) è maggiore del/i mio/i partner/i. Sarebbe una statistica divertente dire "Ho scritto% della base di codice corrente".

Qualcuno ha mai pensato di farlo? Ho cercato un modo, ma il mio script di shell non è il migliore, quindi non ho potuto farlo da solo.

+5

Sono sicuro che l'hai già sentito prima: "Misurare l'avanzamento della programmazione per linee di codice è come misurare il progresso della costruzione dell'aeromobile in base al peso". – Etaoin

+0

@Etaoin: vorrei poterlo aggiungere a +1000. :-) – torek

risposta

1

Si potrebbe provare a analizzare l'output di git-blame. Questo comando dà l'ultima persona che ha modificato ciascuna riga di un file.

Questo esempio non è esattamente quello che vuoi, ma penso che ti dà l'idea:

git blame -e the/file | awk -F '<|>' '{print $2}' | sort | uniq -c 

Questo stamperà gli indirizzi di posta elettronica degli autori insieme al numero di linee hanno modificato infine per un file, ad esempio:

 47 [email protected] 
    34712 [email protected] 

per farlo girare su tutto il repository, si può fare qualcosa di simile:

git ls-files | while read f; do git blame -e $f; done | awk -F '<|>' '{print $2}' | sort | uniq -c 

L'idea qui è quella di generare prima l'elenco di file con git ls-files, e quindi eseguire lo snippet sopra su ciascuno dei file (usando lo snippet menzionato here). Se stai eseguendo questa operazione su una base di codice di grandi dimensioni, potresti voler archiviare risultati intermedi in file temporanei piuttosto che usare pipe.

1

Probabilmente hai bisogno di gitdm, può fare esattamente quello che ti serve. Lo usiamo per il progetto Mahara per produrre contribution statistics.

Basta fare quello README suggerisce:

Una riga di comando tipico utilizzato per generare il "chi scrivere 2.6.x" LWN articoli assomiglia:

git log -p -M v2.6.19..v2.6.20 | gitdm -u -s -a -o results -h results.html 

È possibile anche personalizzare per i tuoi scopi.

Problemi correlati