Voglio vedere il numero di linee rimosse/aggiunte, raggruppate per autore per un dato ramo nella cronologia git. c'è git shortlog -s
che mi mostra il numero di commit per autore. c'è qualcosa di simile a ottenere un diffstat globale?Mostra numero di righe modificate per autore in git
risposta
Dal the SO question "How to count total lines changed by a specific author in a Git repository?" non è del tutto soddisfacente, commandlinefu ha alternative (anche se non per filiale):
git ls-files | while read i; do git blame $i | sed -e 's/^[^(]*(//' -e 's/^\([^[:digit:]]*\)[[:space:]]\+[[:digit:]].*/\1/'; done | sort | uniq -ic | sort -nr
Esso comprende i file binari, che non è buono, così si potrebbe (per rimuovere i file binari veramente casuali):
git ls-files | grep -v "\.\(pdf\|psd\|tif\)$"
(Nota:. come commented da trcarden, un'opzione -x
o --exclude
non avrebbe funzionato
Da git ls-files
man page, git ls-files -x "*pdf" ...
sarebbe solo escluso untracked contenuti, se --others
o --ignored
sono stati aggiunti al comando git ls-files
)
Oppure:.
git ls-files "*.py" "*.html" "*.css"
per includere solo determinati tipi di file.
Eppure, un "git log
"-based solution dovrebbe essere meglio, come:
git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'
ma ancora una volta, questo è per un percorso (qui 2 commit), non per tutti i settori per i rami.
git log è l'unica cosa che non mi fa pensare, bel suggerimento! – jjxtra
In realtà non è possibile ignorare i file binari tramite il metodo specificato. il comando -x su ls-files è disponibile solo per "file non tracciati" errore comune. – trcarden
@trcarden Ottimo punto. Ho modificato la risposta e proposto un modo alternativo per escludere i binari. – VonC
Questo script lo farà. Inseriscilo in authorship.sh, chmod + x it e tutto è pronto.
#!/bin/sh
declare -A map
while read line; do
if grep "^[a-zA-Z]" <<< "$line" > /dev/null; then
current="$line"
if [ -z "${map[$current]}" ]; then
map[$current]=0
fi
elif grep "^[0-9]" <<<"$line" >/dev/null; then
for i in $(cut -f 1,2 <<< "$line"); do
map[$current]=$((map[$current] + $i))
done
fi
done <<< "$(git log --numstat --pretty="%aN")"
for i in "${!map[@]}"; do
echo -e "$i:${map[$i]}"
done | sort -nr -t ":" -k 2 | column -t -s ":"
Come ottenere su Mac OS X 10.6.8 e Debian Linux 5.0.8: '/ Users/slippyd/Desktop/git-authorship: riga 3: dichiarare: -A: opzione non valida declare: usage: declare [-afFirtx] [-p] [nome [= valore] ...] ' –
Questo script ha funzionato meravigliosamente. Grazie! – ColinM
ottenendo lo stesso errore di slipp su un mac, ho cambiato -A a -a (come specificato nel messaggio di errore), ma lo script fallisce comunque, apparentemente non gestisce spazi nei nomi (come lo spazio tra il primo e cognome), ancora alla ricerca di una soluzione che funziona, si potrebbe pensare che questo è qualcosa che molte persone hanno bisogno, per ottenere la promozione :), apparentemente no. bene, dirò solo il 90% del capo! –
Da How to count total lines changed by a specific author in a Git repository?
L'uscita del seguente comando deve essere ragionevolmente facile da inviare al script per sommare i totali:
git log --author="<authorname>" --oneline --shortstat
Questo dà statistiche per tutti i commit sul l'attuale capo . Se vuoi sommare le statistiche in altri rami dovrai fornirle come argomenti per git log.
Si tratta di un vecchio post, ma se qualcuno è ancora alla ricerca di esso:
installare extra git
brew install git-extras
poi
git summary --line
'apt-get install git-extras' per utenti Linux – alex
' fatale: argomento non riconosciuto: --line' Penso che abbiano rimosso l'opzione nella nuova versione – M2X
@ M2X, sembra che 'git line-summary' funziona, anche se è detto nei documenti, che è deprecato a favore di '--line' https://github.com/tj/git-extras/blob/master/Commands.md#git-line-summary – dav
Sul mio repos ho ottenuto un sacco di spazzatura prodotta dagli one-liner che fluttuano, quindi qui è uno script Python per farlo bene:
import subprocess
import collections
import sys
def get_lines_from_call(command):
return subprocess.check_output(command).splitlines()
def get_files(paths=()):
command = ['git', 'ls-files']
command.extend(paths)
return get_lines_from_call(command)
def get_blame(path):
return get_lines_from_call(['git', 'blame', path])
def extract_name(line):
"""
Extract the author from a line of a standard git blame
"""
return line.split('(', 1)[1].split(')', 1)[0].rsplit(None, 4)[0]
def get_file_authors(path):
return [extract_name(line) for line in get_blame(path)]
def blame_stats(paths=()):
counter = collections.Counter()
for filename in get_files(paths):
counter.update(get_file_authors(filename))
return counter
def main():
counter = blame_stats(sys.argv[1:])
max_width = len(str(counter.most_common(1)[0][1]))
for name, count in reversed(counter.most_common()):
print('%s %s' % (str(count).rjust(max_width), name))
if __name__ == '__main__':
main()
Nota che gli argomenti allo script saranno passati al git ls-files
, quindi se solo si desidera visualizzare i file Python: blame_stats.py '**/*.py'
Se si desidera solo mostra i file in una sottodirectory: blame_stats.py some_dir
E così via.
- 1. Git numero di commit per autore su tutti i rami
- 2. il numero di righe modificate dopo sqlite3 eseguire
- 3. Trova tutte le linee correnti modificate da un autore
- 4. Git rebase cambia autore?
- 5. PhpStorm predefinita git autore
- 6. Come contare il numero di commit per file percorso per autore in un repository Git?
- 7. Utilizzare PHP_CodeSniffer solo per le righe modificate
- 8. eclipse reformat solo righe modificate
- 9. Sovrascrivi autore su git merge
- 10. git diff con filtro autore
- 11. Vim: evidenzia le righe modificate
- 12. Android Studio git check in nome autore
- 13. Git/GitHub Numero totale di righe contribuito per un account
- 14. Conteggio delle righe di codice modificate nel tempo
- 15. git blame: autore corretto dopo unione
- 16. Intellij Idea con Git ricorda autore
- 17. GitHub - Lista commit per autore
- 18. Filtraggio per autore in TortoiseHg
- 19. Determinazione della distribuzione del codice corrente per autore
- 20. Git pull cancellato modifiche non modificate
- 21. Numero di righe in csv.DictReader
- 22. Errore Git: modifiche non modificate per il commit
- 23. Archivio Git dell'archivio con modifiche non modificate
- 24. Come tornare alle righe modificate prima dell'ultima in Vim?
- 25. Salto tra le righe modificate in VIM con latitante
- 26. C'è un modo per aggiungere git show, linee modificate e linee rimosse?
- 27. numero di tavola righe
- 28. Annullare la parte delle modifiche non modificate in git
- 29. È possibile utilizzare lo "stile letterario" di un autore per identificarlo come autore di un testo?
- 30. modifiche github non modificate per il commit
http://stackoverflow.com/questions/1265040/how-to-count-total-lines-changed-by-a-specific-author-in-a-git-repository help? Come in 'git shortlog abranch --numbered --summary' – VonC
@VonC, i' git shortlog --numbered --summary' è lo stesso di 'git shortlog -s -n', mostrerà solo il numero di commit, non le linee modificate – knittl