Ответы:
xargs будет делать то, что вы хотите:
git ls-files | xargs cat | wc -l
Но с большей информацией и, возможно, лучше, вы можете сделать:
git ls-files | xargs wc -l
grep cpp |там раньше xargs, потом.
git ls-files -z | xargs -0 wc -lесли у вас есть файлы с пробелами в имени.
git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -lгде часть grep это любое регулярное выражение perl, которое вы хотите!
git ls-files | grep "\.java$" | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Это показывает отличия от пустого дерева до вашего текущего рабочего дерева. Что происходит для подсчета всех строк в вашем текущем рабочем дереве.
Чтобы получить числа в вашем текущем рабочем дереве, сделайте это:
git diff --shortstat `git hash-object -t tree /dev/null`
Это даст вам строку, как 1770 files changed, 166776 insertions(+).
git hash-object -t tree /dev/null.
git diff --stat `git hash-object -t tree /dev/null`
git diff --stat `git hash-object -t tree /dev/null` | tail -1
git diff --shortstat `git hash-object -t tree /dev/null` чтобы получить последнюю строку, tail не нужен.
Если вам нужен этот счет, потому что вы хотите получить представление о масштабах проекта, вы можете предпочесть вывод CLOC («Количество строк кода»), который дает вам разбивку значимых и незначительных строк кода по языку.
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 строк (и на его запуск уходит шесть минут), поскольку он ищет зависимости в node_modulesпапке, игнорируемой Git .
cloc --vcs gitэти дни, что позволяет избежать некоторых крайних случаев с плохо именованными файлами (или слишком многими из них).
Я столкнулся с проблемами пакетной обработки git ls-files | xargs wc -lпри работе с большим количеством файлов, когда количество строк будет разбито на несколько totalстрок.
Отвечая на вопрос, почему утилита wc генерирует несколько строк с «total»? Я нашел следующую команду, чтобы обойти проблему:
wc -l $(git ls-files)
Или, если вы хотите просмотреть только некоторые файлы, например, код:
wc -l $(git ls-files | grep '.*\.cs')
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z). <(COMMAND)Синтаксис возвращает имя файла, содержимое которого являются результатом COMMAND.
В любом случае, лучшее решение для меня - в комментариях к ответу @ ephemient. Я просто вытаскиваю это сюда, чтобы оно не осталось незамеченным. Кредит на это должен пойти в @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. Пустые строки подсчитываются.
git mktree </dev/nullили true|git mktreeили git mktree <&-или :|git mktreeдля счетчиков нажатий клавиш среди нас :-) - свободное пустое дерево, плавающее вокруг репо, не повредит ничему.
Это работает с часов 1.68:
cloc --vcs=git
--vcsне работал для меня, может быть, он был удален cloc .в то время как на Git РЕПО работал, OTOH.
Я играл с cmder ( http://gooseberrycreative.com/cmder/ ) и хотел посчитать строки html, css, java и javascript. Хотя некоторые из приведенных выше ответов сработали, orшаблон в grep не сработал - я нашел здесь ( /unix/37313/how-do-i-grep-for-multiple-patterns ), что у меня было чтобы избежать этого
Вот что я сейчас использую:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
Я использую следующее:
git grep ^ | wc -l
Это ищет во всех файлах, проверенных git, регулярное выражение ^, которое представляет начало строки, поэтому эта команда выдает общее количество строк!
Я сделал это:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
это работает, если вы считаете все текстовые файлы в хранилище интересующими вас файлами. Если некоторые из них считаются документацией и т. Д., Можно добавить фильтр исключения.
Этот инструмент на github https://github.com/flosse/sloc может дать вывод более информативным способом. Это создаст статистику вашего исходного кода:
: | git mktree | git diff --shortstat --stdin
Или:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
В зависимости от того, хотите ли вы включить двоичные файлы, есть два решения.
git grep --cached -al '' | xargs -P 4 cat | wc -lgit grep --cached -Il '' | xargs -P 4 cat | wc -l
«xargs -P 4» означает, что он может читать файлы, используя четыре параллельных процесса. Это может быть очень полезно, если вы сканируете очень большие репозитории. В зависимости от мощности машины вы можете увеличить количество процессов.
-a, обрабатывать двоичные файлы как текст (Включить двоичные файлы)
-l '', показывать только имена файлов вместо совпадающих строк (Сканировать только непустые файлы)
-I, не сопоставлять шаблоны в двоичных файлах (
исключая двоичные файлы) --cached, поиск в индексе, а не в рабочем дереве (включая незафиксированные файлы)