Encontrar la mayoría de los archivos modificados en Git

105

¿Cómo puedo mostrar archivos en Git que cambian con más frecuencia?

Sebastián
fuente

Respuestas:

45

puede usar el comando git effort(del git-extraspaquete) que muestra estadísticas sobre cuántas confirmaciones por archivo (por confirmaciones y días activos).

EDITAR: el esfuerzo de git es solo un script bash que puede encontrar aquí y adaptarlo a sus necesidades si necesita algo más especial.

Asenar
fuente
La salida será dividida en 2 partes, primero obtendrá los resultados sin clasificar, luego los resultados ordenados (y coloreados). ¿Correcto?
Andy
@Andy parece (y git help effortno tiene información al respecto: /). Supongo que el primer conjunto de resultados está ordenado por nombre de archivo y el segundo por número de confirmaciones por archivo. La página de manual también menciona github.com/tj/git-extras/issues para informar problemas
Asenar
¿Es esto similar a esto? blog.riff.org/…
155

Podrías hacer algo como lo siguiente:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

El registro solo muestra los nombres de los archivos que se han cambiado en cada confirmación, mientras que el resto solo clasifica y genera los 10 nombres de archivo que aparecen con más frecuencia.

Mark Longair
fuente
¿Puede decirme si esto se basa en la rama actual o si es para todo el repositorio? ¿Qué pasa con las ramas que aún no se fusionaron?
Karthick S
@KarthickS: eso es solo para confirmaciones en la rama actual; puede agregar --branchesa la git logsi desea incluir confirmaciones en cualquiera de sus ramas locales.
Mark Longair
1
Agradable. Además, encontré que también informa archivos que se eliminaron hace mucho tiempo. La solución rápida fue limitar el tiempo, por ejemplo: --since = "last year"
FractalSpace
2
También es útil usar --since "1 month ago"u otras opciones para reducir la ventana de tiempo
3
Encontré parte de mi respuesta:git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10
AdamMc331
13

Noté que tanto las respuestas de Mark como las de sehe no corresponden a --followlos archivos, es decir, se detienen una vez que alcanzan un cambio de nombre de archivo. Este script será mucho más lento, pero funcionará con ese propósito.

git ls-files |
while read aa
do
  printf . >&2
  set $(git log --follow --oneline "$aa" | wc)
  printf '%s\t%s\n' $1 "$aa"
done > bb
echo
sort -nr bb
rm bb

git-most.sh

Steven Penny
fuente
1
Para expandir esto, creé gist.github.com/caleb15/da591031936f35d80e14a42ca7ba4350 Agrega cambios por carpeta, específicamente por cada carpeta en el rolesdirectorio para mi caso, pero se modifica fácilmente para adaptarse a su caso de uso.
Almenon
3

Para powershell, asumiendo que tienes instalado git bash

git log --pretty=format: --name-only | sort | uniq -c | sort -Descending | select -First 10
Hyeomans
fuente
3

Esta es una versión de Windows

git log --pretty=format: --name-only  > allfiles.csv

luego abre en Excel

A1: FileName
A2: isVisibleFilename  >> =IFERROR(IF(C2>0,TRUE,FALSE),FALSE)
A3: DotLocation >> =FIND("@",SUBSTITUTE(A2,".","@",(LEN(A2)-LEN(SUBSTITUTE(A2,".","")))/LEN(".")))
A4: HasExt       >> =C2>1
A5: TYPE        >> =IF(D2=TRUE,MID(A2,C2+1,18),"")

crear tabla dinámica

values: Type
  Filter: isFilename = true
  Rows : Type
  Sub : FileName

click [Count Of TYPE] -> Sort -> Sort Largest To Smallest
Mickey Perlstein
fuente
Como no sé mucho sobre Excel, no entiendo estas instrucciones.
BigMiner
2
git whatchanged --all | \grep "\.\.\." | cut -d' ' -f5- | cut -f2- | sort | uniq -c | sort

Si solo desea que sus archivos se agreguen --authora git whatchanged --author=name --all.

Andy
fuente
1

Antigua pregunta, pero creo que sigue siendo una pregunta muy útil. Aquí hay un ejemplo práctico en powershell puro. Esto obtendrá los 10 archivos más modificados en su repositorio con respecto a la rama en la que se encuentra.

git log --pretty=format: --name-only | Where-Object { ![string]::IsNullOrEmpty($_) } | Sort-Object | Group-Object  | Sort-Object -Property Count -Descending | Select-Object -Property Count, Name -First 10
Omar Rodríguez
fuente
0

También podemos encontrar archivos cambiados entre dos confirmaciones o ramas, por ejemplo

git log  --pretty=format: --name-only <source_branch>...<target_branch> | sort | uniq -c | sort -rg | head -50 
Pawan Maheshwari
fuente
0

Esto probablemente sea obvio, pero las consultas proporcionadas mostrarán todos los archivos, pero quizás no le interese saber que su configuración o los archivos del proyecto son los más actualizados. Un simple grep aislará sus archivos de código, por ejemplo:

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
Reginald Blue
fuente