Подсчитать количество строк в репозитории git - PullRequest
666 голосов
/ 28 января 2011

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

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

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

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

Ответы [ 12 ]

1021 голосов
/ 28 января 2011

xargs будет делать то, что вы хотите:

git ls-files | xargs cat | wc -l

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

git ls-files | xargs wc -l
313 голосов
/ 28 января 2011
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Здесь показаны отличия от пустого дерева до вашего текущего рабочего дерева.Это происходит для подсчета всех строк в вашем текущем рабочем дереве.

Чтобы получить числа в вашем текущем рабочем дереве, сделайте следующее:

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

Это даст вам строку типа 1770 files changed, 166776 insertions(+).

276 голосов
/ 12 марта 2015

Если вам нужен этот счет, потому что вы хотите получить представление о масштабах проекта, вы можете предпочесть вывод 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.

49 голосов
/ 30 июля 2013

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

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

wc -l $(git ls-files)

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

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

38 голосов
/ 04 марта 2015

Лучшее решение, по крайней мере для меня, скрыто в комментариях к ответу @ 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.Подсчитываются пустые строки.

14 голосов
/ 11 мая 2017

Работает с cloc 1.68:

cloc --vcs=git

8 голосов
/ 22 июля 2015

Я играл с 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

6 голосов
/ 11 января 2017

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

git grep ^ | wc -l

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

3 голосов
/ 04 января 2016

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

  • физические линии
  • строк кода (источник)
  • строк с комментариями
  • однострочные комментарии
  • строк с комментариями к блоку
  • строк перепутано с источником и комментариями
  • пустых строк
2 голосов
/ 21 ноября 2015

Я сделал это:

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

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

...