Pregunta Contar el número de líneas en un repositorio git


¿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

578
2018-01-27 22:07


origen


Respuestas:


xargs hará lo que quieras:

git ls-files | xargs cat | wc -l

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

git ls-files | xargs wc -l

870
2018-01-27 22:11



git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Esto muestra las diferencias desde el árbol vacío hasta su árbol de trabajo actual. Lo cual ocurre al 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`

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


291
2018-01-27 22:51



Si desea este conteo porque desea tener una idea del alcance del proyecto, puede preferir el resultado de CLOC ("Count Lines of Code"), que le proporciona un desglose de las 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. Usa shEs $() sustitución de comando característica.)

Muestra de salida:

      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
-------------------------------------------------------------------------------

Primero deberá instalar CLOC. Probablemente puedas instalar cloc con su administrador de paquetes - por ejemplo, brew install cloc con Homebrew.

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


247
2018-03-12 16:32



He encontrado problemas de procesamiento por lotes con git ls-files | xargs wc -l cuando se trata de un gran número de archivos, donde el recuento de líneas se dividirá en múltiples total líneas.

Tomando un consejo de la pregunta ¿Por qué la utilidad wc genera múltiples líneas con "total"?, He encontrado el siguiente comando para eludir el problema:

wc -l $(git ls-files)

O si solo desea examinar algunos archivos, p. código:

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


46
2017-07-30 06:03



La mejor solución, para mí de todos modos, está enterrada en los comentarios de la respuesta de @ephemient. Solo lo estoy jalando aquí para que no pase desapercibido. El crédito para esto debería 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 es

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Eso funciona en Windows, también.

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. Las líneas en blanco se cuentan.


33
2018-03-04 15:39



Estaba jugando con cmder (http://gooseberrycreative.com/cmder/) y quería contar las líneas de html, css, java y javascript. Si bien algunas de las respuestas anteriores funcionaron, or patrón en grep no lo encontré aquí (https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns) que tuve que escapar de ella

Entonces esto es lo que uso ahora:

git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l


6
2017-07-22 01:00



Yo uso lo siguiente:

git grep ^ | wc -l

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


6
2018-01-11 06:46



Esto funciona a partir de cloc 1.68:

cloc --vcs=git


6
2018-05-11 19:31



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

  • líneas físicas
  • 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 la fuente y los comentarios
  • líneas vacías

3
2018-01-04 08:00



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 archivos de interés. Si algunos se consideran documentación, etc., se puede agregar un filtro de exclusión.


2
2017-11-21 20:54



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

O:

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

0
2018-01-04 01:25