Misurazione del numero di file su tutta la cronologia del progetto in Git

2

Sto cercando un modo per quantificare dove la mia squadra dovrebbe dedicare il proprio tempo ad affrontare il debito tecnico nella nostra base di codici. Un'idea per questo è misurare il tasso di abbandono del file (modifiche nel tempo). Ho avuto l'idea da questo video in cui Michael Feathers parla di sfuggire al ciclo del debito tecnico:

link

Quello che mi piacerebbe misurare è il numero totale di volte in cui ogni file è stato modificato nella base di codice. Mi piacerebbe anche che le linee totali cambiassero per ogni file.

Ho provato git log --state ma non è il risultato che mi piacerebbe vedere. Non mi interessa di ogni singolo commit, o degli autori, voglio solo che i numeri grezzi totali accumulino complessivamente tutte le modifiche per ogni file che ancora esiste attualmente nel master.

    
posta Christopher Perry 27.05.2018 - 21:31
fonte

2 risposte

1

Quanto segue mostrerà, per ogni file in HEAD corrente, il numero di volte che è stato cambiato (numero di commit che lo hanno toccato), il numero di linee che sono state aggiunte e cancellate, dove un cambiamento in un linge è entrambi un'aggiunta e una cancellazione:

for f in $(git ls-tree -r master --name-only) ; do \
git log --numstat --oneline "$f" | grep -E "$f\$" | \
perl -ne 'BEGIN {$a=0; $d=0; $l=0; $file="";} if (m/^(\d+)\s+(\d+)\s+(\S+)/) {$l++; $a+=$1; $d+=$2; $file=$3;} END {print "$file changes=$l added=$a deleted=$d\n"; }'; done

Non è ottimizzato ma fa il lavoro. Potresti avere problemi con file e file binari i cui nomi hanno spazi e altri caratteri interpretati dalla shell. Questo potrebbe essere risolto.

Ad esempio in uno dei miei progetti restituisce:

.gitignore changes=3 added=4 deleted=0
Changes changes=48 added=1261 deleted=64
EPP_namespaces.txt changes=3 added=149 deleted=1
INSTALL changes=1 added=94 deleted=0
LICENSE changes=1 added=340 deleted=0
MANIFEST.SKIP changes=6 added=54 deleted=17
Makefile.PL changes=27 added=115 deleted=33

ecc.

    
risposta data 03.06.2018 - 06:49
fonte
1

È possibile ottenere il numero di volte in cui è stato eseguito il commit di un file utilizzando:

git log --format=oneline [path_to_file]

Fornisce risultati come questo:

078d420881d6000e3d545dd22d78f0d6c7f75805 (HEAD -> master) Allow user to adjust width of the effect. 
8b63fa83ae3808d8f745b91c23f64d8628ae73b9 First working version. 
6e4c20fe911bcddedc82e5b8b732744b84447b08 Initial Commit

Puoi ridurlo a qualcosa come wc -l per ottenere il numero di linee:

git log --format=oneline foo.cpp | wc -l

Risultati:

   3

Potresti scrivere uno script di shell per percorrere la tua directory sorgente ed eseguire questo comando su ogni file, per esempio.

Puoi ottenere il numero di modifiche per commit facendo:

git log --format=oneline --numstat foo.cpp

Nota che con l'unione, l'output è un po 'più complicato.

    
risposta data 27.05.2018 - 22:35
fonte

Leggi altre domande sui tag