Câu trả lời:
xargs
sẽ làm những gì bạn muốn:
git ls-files | xargs cat | wc -l
Nhưng với nhiều thông tin hơn và có thể tốt hơn, bạn có thể làm:
git ls-files | xargs wc -l
grep cpp |
ở đó trước xargs
, sau đó.
git ls-files -z | xargs -0 wc -l
nếu bạn có tệp có khoảng trắng trong tên.
git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -l
trong đó phần grep là bất kỳ biểu thức chính quy nào bạn muốn!
git ls-files | grep "\.java$" | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Điều này cho thấy sự khác biệt từ cây trống đến cây làm việc hiện tại của bạn. Điều này xảy ra để đếm tất cả các dòng trong cây làm việc hiện tại của bạn.
Để lấy số trong cây làm việc hiện tại của bạn, hãy làm điều này:
git diff --shortstat `git hash-object -t tree /dev/null`
Nó sẽ cung cấp cho bạn một chuỗi như 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`
để có được dòng cuối cùng, đuôi là không cần thiết.
Nếu bạn muốn số này vì bạn muốn có ý tưởng về phạm vi của dự án, bạn có thể thích đầu ra của CLOC (Dòng Count Code Code Code), cung cấp cho bạn phân tích các dòng mã quan trọng và không đáng kể theo ngôn ngữ.
cloc $(git ls-files)
(Dòng này tương đương với git ls-files | xargs cloc
. Nó sử dụng sh
's $()
thay thế lệnh tính năng.)
Đầu ra mẫu:
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
-------------------------------------------------------------------------------
Bạn sẽ phải cài đặt CLOC trước. Bạn có thể có thể cài đặt cloc
với trình quản lý gói của mình - ví dụ: brew install cloc
với Homebrew .
cloc $(git ls-files)
thường là một cải tiến hơn cloc .
. Ví dụ, đầu ra mẫu ở trên với git ls-files
báo cáo 471 dòng mã. Đối với cùng một dự án, cloc .
báo cáo một số lượng lớn 456.279 dòng (và mất sáu phút để chạy), vì nó tìm kiếm các phụ thuộc trong node_modules
thư mục bỏ qua Git .
cloc --vcs git
những ngày này, trong đó tránh một số trường hợp cạnh với các tệp có tên xấu (hoặc quá nhiều trong số chúng).
Tôi đã gặp phải sự cố hàng loạt git ls-files | xargs wc -l
khi xử lý số lượng lớn tệp, trong đó số lượng dòng sẽ được chia thành nhiều total
dòng.
Lấy một mẹo từ câu hỏi Tại sao tiện ích wc tạo ra nhiều dòng với "tổng"? , Tôi đã tìm thấy lệnh sau để bỏ qua vấn đề:
wc -l $(git ls-files)
Hoặc nếu bạn chỉ muốn kiểm tra một số tệp, ví dụ mã:
wc -l $(git ls-files | grep '.*\.cs')
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z)
. Các <(COMMAND)
cú pháp trả về tên của một tập tin có nội dung là kết quả của COMMAND
.
Đối với tôi, giải pháp tốt nhất, được chôn vùi trong các bình luận về câu trả lời của @ ephemient. Tôi chỉ kéo nó lên đây để nó không bị chú ý. Tín dụng cho việc này sẽ được chuyển đến @FRoZeN (và @ephemient).
git diff --shortstat `git hash-object -t tree /dev/null`
trả về tổng số tệp và dòng trong thư mục làm việc của repo mà không có bất kỳ tiếng ồn bổ sung nào. Là một phần thưởng, chỉ có mã nguồn được tính - các tệp nhị phân được loại trừ khỏi kiểm đếm.
Lệnh trên hoạt động trên Linux và OS X. Phiên bản đa nền tảng của nó là
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Điều đó cũng hoạt động trên Windows.
Đối với bản ghi, các tùy chọn để loại trừ các dòng trống,
-w
/ --ignore-all-space
,-b
/ --ignore-space-change
,--ignore-blank-lines
, --ignore-space-at-eol
Không có bất kỳ tác dụng khi sử dụng với --shortstat
. Dòng trống được tính.
git mktree </dev/null
hay true|git mktree
hay git mktree <&-
hay :|git mktree
cho các tổ hợp phím-quầy giữa chúng ta :-) - một cây trống tùng nổi xung quanh repo sẽ không bất cứ điều gì tổn thương.
Cái này hoạt động như cloc 1.68:
cloc --vcs=git
--vcs
không làm việc cho tôi, có lẽ nó đã được gỡ bỏ. cloc .
trong khi tại git repo đã làm việc, OTOH.
Tôi đã chơi xung quanh với cmder ( http://gooseberrycreative.com/cmder/ ) và tôi muốn đếm các dòng html, css, java và javascript. Trong khi một số câu trả lời ở trên có hiệu quả, or
mẫu trong grep không có - tôi đã tìm thấy ở đây ( /unix/37313/how-do-i-grep-for-multipl-potypes ) mà tôi đã có để thoát khỏi nó
Vì vậy, đây là những gì tôi sử dụng bây giờ:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
Tôi sử dụng như sau:
git grep ^ | wc -l
Điều này tìm kiếm tất cả các tệp được git cho regex ^
, biểu thị phần đầu của một dòng, vì vậy lệnh này cho tổng số dòng!
Tôi đã làm điều này:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
điều này hoạt động nếu bạn tính tất cả các tệp văn bản trong kho lưu trữ là các tệp quan tâm. Nếu một số được coi là tài liệu, vv, một bộ lọc loại trừ có thể được thêm vào.
Công cụ này trên github https://github.com/flosse/sloc có thể cung cấp đầu ra theo cách mô tả hơn. Nó sẽ tạo số liệu thống kê về mã nguồn của bạn:
: | git mktree | git diff --shortstat --stdin
Hoặc là:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
Tùy thuộc vào việc bạn có muốn bao gồm các tệp nhị phân hay không, có hai giải pháp.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
"xargs -P 4" có nghĩa là nó có thể đọc các tệp bằng bốn quy trình song song. Điều này có thể thực sự hữu ích nếu bạn đang quét các kho rất lớn. Tùy thuộc vào công suất của máy, bạn có thể tăng số lượng quy trình.
-a, xử lý tệp nhị phân dưới dạng văn bản (Bao gồm nhị phân)
-l '', chỉ hiển thị tên tệp thay vì khớp dòng (Chỉ quét các tệp không trống)
-I, không khớp các mẫu trong tệp nhị phân (Loại trừ nhị phân)
--cached, tìm kiếm trong chỉ mục thay vì trong cây công việc (Bao gồm các tệp không được cam kết)