Ho un repository GIT e voglio calcolare quante righe di codice sono state aggiunte/modificate da una persona o da un gruppo di persone durante un certo periodo di tempo. È possibile calcolare con git?Git: come stimare un contributo di una persona al mio progetto in termini di linee di codice aggiunte/modificate?
risposta
È possibile utilizzare git log
e alcuni shell-fu:
git log --shortstat --author "Aviv Ben-Yosef" --since "2 weeks ago" --until "1 week ago" \
| grep "files\? changed" \
| awk '{files+=$1; inserted+=$4; deleted+=$6} END \
{print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}'
Spiegazione: git log --shortstat
visualizza una statistica breve di ogni commit, che, tra le altre cose, mostra il numero di file modificati, righe inserite e cancellate. Possiamo quindi filtrarlo per un committer specifico (--author "Your Name"
) e un intervallo di tempo (--since "2 weeks ago" --until "1 week ago"
).
Ora, per riassumere effettivamente le statistiche anziché vedere la voce per commit, eseguiamo alcuni script di shell per farlo. Innanzitutto, utilizziamo grep
per filtrare solo le righe con le differenze. Queste linee appaiono così:
8 files changed, 169 insertions(+), 81 deletions(-)
o questo:
1 file changed, 4 insertions(+), 4 deletions(-)
Abbiamo poi sommiamo questi utilizzando awk
: per ogni linea aggiungiamo i file modificati (prima parola), le linee inserite (4a parola) e righe cancellate (sesta parola) e poi stamparle dopo aver sommato tutto.
Modifica: le barre in avanti sono state aggiunte nello snippet superiore in modo che possa essere copiata e incollata in una riga di comando.
Penso che sia necessario "=" tra il --author e --since e --until –
Grazie per quello! L'ho ottimizzato un po 'e ne ho fatto una funzione shell. E 'disponibile qui: https://gist.github.com/pstadler/4722416 – pstadler
Questa grande opera finché ci sono inserimenti. Nel caso in cui ci sarebbero solo cancellazioni, conterebbero come inserimenti, perché la quarta parola su '8 file modificati, 81 delezioni' è la cancellazione, non l'inserimento. –
È possibile generare statistiche utilizzando Gitstats. Ha una sezione "Autori" che include il numero di linee aggiunte/rimosse dai primi 20 autori (20 per numero di commit).
Edit: C'è anche Git: Blame Statistics
Per particolari date, è possibile utilizzare --since "2012-08-27" --until "2012-09-01"
Come
git log --shortstat --author "Fabian" --since "2012-08-27" --until "2012-09-01" | grep "file modificati" | awk '{files + = $ 1; inserita + = $ 4; cancellato + = $ 6} END {print "file cambiato", i file, "le linee inserite:", inserita, "le linee cancellate:", cancellati}'
controllare questa spiegazione
Puoi provare Atlassian's Fisheye/Crucible che si integra con Git (così come altri repository di codice). Quindi i contributi di tutti - compreso il loro LOC - vengono visualizzati pubblicamente in un'app Web facilmente leggibile. Anche per piccoli gruppi è abbastanza economico.
Aprire l'informazione e lasciarlo parlare da solo.
fisheye al momento non supporta le metriche LOC su GIT o sugli archivi mercuriali purtroppo. Solo SVN sembra essere supportato per queste statistiche. https://confluence.atlassian.com/display/FISHEYE/Cannot+View+Lines+of+Code+Information+in+FishEye –
Ouch! Sono corretto. Anche la mia fiducia in Atlassian è un po 'scossa. – ingyhere
Le ultime versioni di Fisheye ora supportano Git! – ingyhere
eseguire questo comando:
git log --pretty=format:'' --numstat --author 'Lu4' | awk 'NF' | awk '{insertions+=$1; deletions+=$2} END {print NR, "files changed,", insertions, "insertions(+),", deletions, "deletions(+)"}';
Questo comando è molto vicina a quella intelligente nella abyx's answer, ma gestisce anche il caso limite trovata da Wallace Sidhrée. A volte, un commit comporta solo cancellazioni (cioè, nessun inserimento). Il comando in abyx's answer legge erroneamente tali eliminazioni come inserimenti. Il comando qui li legge correttamente perché utilizza --numstat
anziché --shortstat
. A differenza --shortstat
, --numstat
include sia gli inserimenti ed eliminazioni per quelle commit.
Si noti che entrambi i comandi includono file binari nel conteggio dei file, ma escludono il numero di linee inserite e cancellate all'interno di questi binari.
Ecco un altro trucco utile. Creare un file denominato gitstats
con questo contenuto:
#!/usr/bin/env bash
git log --pretty=format:'' --numstat "[email protected]" | awk 'NF' | awk '{insertions+=$1; deletions+=$2} END {print NR, "files changed,", insertions, "insertions(+),", deletions, "deletions(+)"}';
Quindi è possibile eseguire quel comando con tutte le opzioni in più per git log
si desidera. Ecco alcuni esempi:
./gitstats;
./gitstats --since '1 month ago';
./gitstats --since '1 month ago' --until '1 day ago';
./gitstats --author 'Lu4' --since '1 month ago' --until '1 day ago';
(Il file può essere chiamato qualcosa di diverso gitstats
, naturalmente.)
- 1. Stimare la dimensione di un repository Git prima di clonarlo
- 2. Visual Studio - Determinazione di linee No di righe di codice in un progetto
- 3. Come determinare il contributo totale di uno sviluppatore a SubVersion?
- 4. Creazione di profili di un progetto C++ in termini di tempo di esecuzione
- 5. Come associo le linee modificate con le funzioni in un repository git di codice C?
- 6. Riorganizzazione del repository Git con codice prototipo al progetto di pubblicazione reale
- 7. Come dire a git di ignorare le singole righe, cioè gitignore per linee specifiche di codice
- 8. Come aggiungo curlpp al mio progetto?
- 9. Come dire al debugger di PHPStorm, che il mio progetto ha una root di documento diversa dalla root di progetto
- 10. git, fatto una richiesta di pull ma trovato un bug nel mio codice, come risolverlo?
- 11. Come al mio "exe" dal progetto PyCharm
- 12. Impossibile ottenere il contributo di clojure - FileNotFoundException
- 13. Come aggiungere JSoup.jar al mio progetto Android?
- 14. Come recuperare l'elenco di tutti i repository github di una persona?
- 15. Come si aggiunge un MP3 al mio progetto iOS/Xcode?
- 16. Come posso stimare la compressibilità di un file senza comprimerlo?
- 17. Come posso inviare un ramo specifico di Git al mio server?
- 18. contare le linee in un progetto PHP
- 19. Trova il numero di linee in un progetto con PowerShell
- 20. Linee di allineamento del codice?
- 21. Git aggiunge linee all'indice di grep/regex
- 22. Scrittura di termini al plurale senza ridondanza
- 23. Come resettare tutto Heroku nel mio Git/Rails 3.1 Progetto
- 24. Impossibile aggiungere android.support.v7 al mio progetto percorso di generazione
- 25. Record corrispondenti in base al Nome persona
- 26. Come stimare il tempo di interrogazione SQL?
- 27. Aggiunta di Facebook Connetti al mio iPhone Progetto
- 28. Come posso automatizzare ottenere la data di compilazione in una costante visibile al mio codice?
- 29. Come impostare a livello di codice l'URL di una WebView in un progetto OSX Xcode?
- 30. Aggiunta di un sottodominio al mio progetto del motore di app di google?
Non utilizzare questo per la stima "performance" btw, vedi http: // blogs .msdn.com/b/oldnewthing/archive/2010/11/16/10091537.aspx – ismail
Grazie per il tuo commento, non avevo nessuna intenzione di misurare lo stipendio di una persona con questo tipo di misura. Questo sarà fatto per avere il quadro completo del lavoro di una persona, e nessuno saprà mai che quel che sto facendo uno – Lu4
Non è la dimensione delle linee, è come si utilizzano. – ingyhere