Ответ 1
xargs
сделает то, что вы хотите:
git ls-files | xargs cat | wc -l
Но с большей информацией и, вероятно, лучше, вы можете сделать:
git ls-files | xargs wc -l
Как подсчитать общее количество строк во всех файлах в репозитории git?
git ls-files
дает мне список файлов, отслеживаемых git.
Я ищу команду для cat
всех этих файлов. Что-то вроде
git ls-files | [cat all these files] | wc -l
xargs
сделает то, что вы хотите:
git ls-files | xargs cat | wc -l
Но с большей информацией и, вероятно, лучше, вы можете сделать:
git ls-files | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Это показывает различия между пустым деревом и текущим рабочим деревом. Что происходит, чтобы подсчитать все строки в текущем рабочем дереве.
Если вы хотите этот счет, потому что хотите получить представление о области проектов, вы можете предпочесть вывод 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
.
Я столкнулся с проблемами пакетной обработки с git ls-files | xargs wc -l
при работе с большим количеством файлов, где количество строк будет выведено в несколько строк total
.
Взяв подсказку из вопроса Почему служебная программа wc генерирует несколько строк с "общим" ?, я нашел следующую команду для обхода проблемы:
wc -l $(git ls-files)
Или, если вы хотите просмотреть только некоторые файлы, например. код:
wc -l $(git ls-files | grep '.*\.cs')
Лучшее решение, мне все равно, похоронено в комментариях @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
. Будут подсчитаны пустые строки.
Я играл с 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
Этот инструмент в github https://github.com/flosse/sloc может дать результат более наглядным образом. Он будет создавать статистику вашего исходного кода:
Я использую следующее:
git grep ^ | wc -l
Здесь выполняется поиск всех файлов с версией git для регулярного выражения ^
, который представляет начало строки, поэтому эта команда дает общее количество строк!
Это работает как cloc 1.68:
cloc --vcs=git
Я сделал это:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
это работает, если вы считаете все текстовые файлы в репозитории как файлы, представляющие интерес. Если некоторые из них считаются документацией и т.д., Может быть добавлен фильтр исключения.
: | git mktree | git diff --shortstat --stdin
Или:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin