Подтвердить что ты не робот

Количество строк в репозитории git

Как подсчитать общее количество строк во всех файлах в репозитории git?

git ls-files дает мне список файлов, отслеживаемых git.

Я ищу команду для cat всех этих файлов. Что-то вроде

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

Ответ 1

xargs сделает то, что вы хотите:

git ls-files | xargs cat | wc -l

Но с большей информацией и, вероятно, лучше, вы можете сделать:

git ls-files | xargs wc -l

Ответ 2

git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Это показывает различия между пустым деревом и текущим рабочим деревом. Что происходит, чтобы подсчитать все строки в текущем рабочем дереве.

Ответ 3

Если вы хотите этот счет, потому что хотите получить представление о области проектов, вы можете предпочесть вывод CLOC ( "Count Lines of Code" ), который дает вам разбивку значимых и незначительных строк кода на языке.

cloc $(git ls-files)

(Эта строка эквивалентна git ls-files | xargs cloc. Она использует sh s $() функция замены команд).

Пример вывода:

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

Сначала вам нужно установить CLOC. Вы можете установить cloc с вашим менеджером пакетов - например, brew install cloc с Homebrew.

cloc $(git ls-files) часто является улучшением по сравнению с cloc .. Например, вышеприведенный вывод с git ls-files сообщает 471 строку кода. Для того же проекта cloc . сообщает о колоссальных 456 279 строках (и занимает шесть минут для запуска), поскольку он ищет зависимости в папке Git -ignored node_modules.

Ответ 4

Я столкнулся с проблемами пакетной обработки с git ls-files | xargs wc -l при работе с большим количеством файлов, где количество строк будет выведено в несколько строк total.

Взяв подсказку из вопроса Почему служебная программа wc генерирует несколько строк с "общим" ?, я нашел следующую команду для обхода проблемы:

wc -l $(git ls-files)

Или, если вы хотите просмотреть только некоторые файлы, например. код:

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

Ответ 5

Лучшее решение, мне все равно, похоронено в комментариях @emhemient ответа. Я просто потянул его сюда, чтобы он не остался незамеченным. Для этого нужно перейти к @FRoZeN (и @ephemient).

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

возвращает общее количество файлов и строк в рабочем каталоге репо без каких-либо дополнительных помех. В качестве бонуса учитывается только исходный код - двоичные файлы исключаются из таллинга.

Команда выше работает в Linux и OS X. Кросс-платформенная версия этого файла

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Это тоже работает в Windows.

Для записи опции для исключения пустых строк

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

не имеют эффекта при использовании с --shortstat. Будут подсчитаны пустые строки.

Ответ 6

Я играл с cmder (http://gooseberrycreative.com/cmder/), и мне хотелось подсчитать строки html, css, java и javascript. Хотя некоторые из приведенных выше ответов работали, шаблон or в grep не был - я нашел здесь (https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns), что мне пришлось его избежать

Так вот что я сейчас использую:

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

Ответ 7

Этот инструмент в github https://github.com/flosse/sloc может дать результат более наглядным образом. Он будет создавать статистику вашего исходного кода:

  • физические строки
  • строки кода (источник)
  • строки с комментариями
  • однострочные комментарии
  • строки с комментариями блока
  • строки, смешанные с источником и комментариями
  • пустые строки

Ответ 8

Я использую следующее:

git grep ^ | wc -l

Здесь выполняется поиск всех файлов с версией git для регулярного выражения ^, который представляет начало строки, поэтому эта команда дает общее количество строк!

Ответ 9

Это работает как cloc 1.68:

cloc --vcs=git

Ответ 10

Я сделал это:

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

это работает, если вы считаете все текстовые файлы в репозитории как файлы, представляющие интерес. Если некоторые из них считаются документацией и т.д., Может быть добавлен фильтр исключения.

Ответ 11

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

Или:

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