Как бы подсчитать общее количество строк, присутствующих во всех файлах в репозитории git?
git ls-files
дает мне список файлов, отслеживаемых git.
Я ищу команду для cat
всех этих файлов. Что-то вроде
git ls-files | [cat all these files] | wc -l
bash
git
shell
line-count
Dogbert
источник
источник
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
Это показывает отличия от пустого дерева до вашего текущего рабочего дерева. Что происходит для подсчета всех строк в вашем текущем рабочем дереве.
Чтобы получить числа в вашем текущем рабочем дереве, сделайте это:
Это даст вам строку, как
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 («Количество строк кода»), который дает вам разбивку значимых и незначительных строк кода по языку.
(Эта строка эквивалентна
git ls-files | xargs cloc
. Он используетsh
«s$()
команды заместительную функцию.)Пример вывода:
Сначала вам нужно будет установить 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).
возвращает общее количество файлов и строк в рабочем каталоге репо без каких-либо дополнительных помех. В качестве бонуса учитывается только исходный код - двоичные файлы исключаются из подсчета.
Команда выше работает на Linux и OS X. Кроссплатформенная версия этого
Это работает и в 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, регулярное выражение
^
, которое представляет начало строки, поэтому эта команда выдает общее количество строк!источник
Я сделал это:
это работает, если вы считаете все текстовые файлы в хранилище интересующими вас файлами. Если некоторые из них считаются документацией и т. Д., Можно добавить фильтр исключения.
источник
Этот инструмент на github https://github.com/flosse/sloc может дать вывод более информативным способом. Это создаст статистику вашего исходного кода:
источник
Пытаться:
на каталог / рассматриваемые каталоги
источник
Или:
источник
В зависимости от того, хотите ли вы включить двоичные файлы, есть два решения.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
-a, обрабатывать двоичные файлы как текст (Включить двоичные файлы)
-l '', показывать только имена файлов вместо совпадающих строк (Сканировать только непустые файлы)
-I, не сопоставлять шаблоны в двоичных файлах (
исключая двоичные файлы) --cached, поиск в индексе, а не в рабочем дереве (включая незафиксированные файлы)
источник