답변:
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 부분은 원하는 펄 정규식입니다!
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`
마지막 줄을 얻는 데 사용 하면 꼬리가 필요하지 않습니다.
프로젝트의 범위에 대한 아이디어를 원하기 때문에이 수를 원한다면 CLOC (“코드 라인 수”) 의 출력을 선호 할 수 있습니다.이 코드는 언어별로 중요하고 중요하지 않은 코드 라인을 세분화합니다.
cloc $(git ls-files)
(이 라인은 동일하다 git ls-files | xargs cloc
.이 사용 sh
의 $()
명령 대체 기능).
샘플 출력 :
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
에 브루 .
cloc $(git ls-files)
종종 개선되었습니다 cloc .
. 예를 들어, 위의 샘플 출력에는 git ls-files
471 줄의 보고서가 있습니다. 동일한 프로젝트의 cloc .
경우 Git-ignored node_modules
폴더 의 종속성을 검색하기 때문에 무려 456,279 줄을보고하고 실행하는 데 6 분이 걸립니다 .
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`
추가 노이즈없이 repo 작업 디렉토리에있는 총 파일 및 행을 리턴합니다. 보너스로 소스 코드 만 계산됩니다. 바이너리 파일은 탈리에서 제외됩니다.
위의 명령은 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
우리 가운데 키 입력 카운터 :-) 위해 - REPO 주위에 떠 여분의 빈 나무 상처 아무것도하려고하지 않습니다.
이것은 cloc 1.68부터 작동합니다 .
cloc --vcs=git
--vcs
나를 위해 일하지 않았다, 아마도 제거되었을 수 있습니다. cloc .
git repo에서 일하는 동안 OTOH.
나는 cmder ( http://gooseberrycreative.com/cmder/ ) 로 놀고 있었고 html, css, java 및 javascript의 줄을 세고 싶었습니다. 위의 답변 중 일부는 근무하는 동안, or
(나는 여기 - 그렙의 패턴은하지 않았다 /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에 의해 버전이 지정된 모든 파일을 검색 하므로이 명령은 총 줄 수를 제공합니다!
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 -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
"xargs -P 4"는 4 개의 병렬 프로세스를 사용하여 파일을 읽을 수 있음을 의미합니다. 매우 큰 리포지토리를 검색하는 경우이 기능이 도움이 될 수 있습니다. 기계의 용량에 따라 프로세스 수가 증가 할 수 있습니다.
-a, 이진 파일을 텍스트로 처리 (이진 포함)
-l '', 일치하는 줄 대신 파일 이름 만 표시 (빈 파일이 아닌 파일 만 스캔)
-I, 이진 파일의 패턴과 일치하지 않음 (이진 제외)-
캐시, 작업 트리 대신 색인에서 검색 (커밋되지 않은 파일 포함)