repositorio que proyecto compartir clonado actualizar bash git shell line-count

bash - que - Contar el número de líneas en un repositorio git



compartir repositorio gitlab (12)

¿Cómo contaría el número total de líneas presentes en todos los archivos en un repositorio de git?

git ls-files me da una lista de archivos rastreados por git.

Estoy buscando un comando para cat todos esos archivos. Algo como

git ls-files | [cat all these files] | wc -l


Esta herramienta en github https://github.com/flosse/sloc puede dar el resultado de una manera más descriptiva. Creará estadísticas de su código fuente:

  • lineas fisicas
  • líneas de código (fuente)
  • líneas con comentarios
  • comentarios de una sola línea
  • líneas con comentarios de bloque
  • Líneas mezcladas con fuente y comentarios.
  • líneas vacías


Esto funciona a partir del CLOC 1.68:

cloc --vcs=git


He encontrado problemas de procesamiento por lotes con git ls-files | xargs wc -l git ls-files | xargs wc -l cuando se trata de una gran cantidad de archivos, donde el recuento de líneas se dividirá en varias líneas total .

Tomar un consejo de la pregunta ¿Por qué la utilidad wc genera varias líneas con "total"? , He encontrado el siguiente comando para evitar el problema:

wc -l $(git ls-files)

O si solo desea examinar algunos archivos, por ejemplo, el código:

wc -l $(git ls-files | grep ''.*/.cs'')


Hice esto:

git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l

esto funciona si cuenta todos los archivos de texto en el repositorio como los archivos de interés. Si algunos se consideran documentación, etc., se puede agregar un filtro de exclusión.


La mejor solución, para mí de todos modos, está enterrada en los comentarios de la respuesta de @phemient. Solo lo estoy tirando aquí para que no pase desapercibido. El crédito para esto debe ir a @FRoZeN (y @ephemient).

git diff --shortstat `git hash-object -t tree /dev/null`

devuelve el total de archivos y líneas en el directorio de trabajo de un repositorio, sin ningún ruido adicional. Como beneficio adicional, solo se cuenta el código fuente: los archivos binarios se excluyen de la cuenta.

El comando anterior funciona en Linux y OS X. La versión multiplataforma del mismo es

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Eso también funciona en Windows.

Para el registro, las opciones para excluir líneas en blanco,

  • -w / --ignore-all-space ,
  • -b / --ignore-space-change ,
  • --ignore-blank-lines ,
  • --ignore-space-at-eol

no tiene ningún efecto cuando se usa con --shortstat . Se cuentan las líneas en blanco.


Si desea este recuento porque desea tener una idea del alcance del proyecto, puede preferir la salida de CLOC ("Recuento de líneas de código"), que le brinda un desglose de líneas de código significativas e insignificantes por idioma.

cloc $(git ls-files)

(Esta línea es equivalente a git ls-files | xargs cloc . Utiliza la función de sustitución del comando $() sh $() .

Salida de muestra:

20 text files. 20 unique files. 6 files ignored. http://cloc.sourceforge.net v 1.62 T=0.22 s (62.5 files/s, 2771.2 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Javascript 2 13 111 309 JSON 3 0 0 58 HTML 2 7 12 50 Handlebars 2 0 0 37 CoffeeScript 4 1 4 12 SASS 1 1 1 5 ------------------------------------------------------------------------------- SUM: 14 22 128 471 -------------------------------------------------------------------------------

Tendrás que instalar CLOC primero. Probablemente pueda instalar cloc con su administrador de paquetes, por ejemplo, brew install cloc con Homebrew .

cloc $(git ls-files) es a menudo una mejora sobre cloc . . Por ejemplo, la salida de muestra anterior con git ls-files reporta 471 líneas de código. Para el mismo proyecto, cloc . informa la friolera de 456,279 líneas (y tarda seis minutos en ejecutarse), porque busca las dependencias en la carpeta node_modules ignorada por Git.


Tratar:

find . -type f -name ''*.*'' -exec wc -l {} +

en el directorio / directorios en cuestión


Yo uso lo siguiente:

git grep ^ | wc -l

Esto busca en todos los archivos versionados por git para la expresión regular ^ , que representa el comienzo de una línea, por lo que este comando da el número total de líneas.


xargs hará lo que quieras:

git ls-files | xargs cat | wc -l

Pero con más información y probablemente mejor, puedes hacer:

git ls-files | xargs wc -l


: | git mktree | git diff --shortstat --stdin

O:

git ls-tree @ | sed ''1i//' | git mktree --batch | xargs | git diff-tree --shortstat --stdin


git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Esto muestra las diferencias entre el árbol vacío y su árbol de trabajo actual. Lo que sucede es contar todas las líneas en su árbol de trabajo actual.

Para obtener los números en su árbol de trabajo actual, haga esto:

git diff --shortstat `git hash-object -t tree /dev/null`

Le dará una cadena como 1770 files changed, 166776 insertions(+) .