जवाबों:
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 .
456,279 लाइनों (और चलाने में छह मिनट) की रिपोर्ट करता है, क्योंकि यह गिट-इग्नोर किए गए node_modules
फ़ोल्डर में निर्भरता की खोज करता है ।
cloc --vcs git
इन दिनों का उपयोग कर सकते हैं , जो कुछ नामित मामलों को बुरी तरह से नामित फाइलों (या उनमें से बहुत से) से बचाते हैं।
मुझे git ls-files | xargs wc -l
बड़ी संख्या में फ़ाइलों के साथ काम करते समय समस्याओं का सामना करना पड़ा है , जहां लाइन की संख्या कई total
लाइनों में काट दी जाएगी ।
प्रश्न से एक टिप लेते हुए कि wc उपयोगिता "कुल" के साथ कई लाइनें क्यों बनाती है? , मैंने इस मुद्दे को दरकिनार करने के लिए निम्न आदेश पाया है:
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`
रेपो के वर्किंग डायरेक्टरी में कुल फ़ाइलों और लाइनों को बिना किसी अतिरिक्त शोर के लौटाता है। एक बोनस के रूप में, केवल स्रोत कोड गिना जाता है - बाइनरी फ़ाइलों को टैली से बाहर रखा गया है।
ऊपर का कमांड लिनक्स और ओएस एक्स पर काम करता है। इसका क्रॉस-प्लेटफॉर्म संस्करण है
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
यह विंडोज पर भी काम करता है।
रिकॉर्ड के लिए, रिक्त लाइनों को छोड़कर विकल्प,
-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, जावा और जावास्क्रिप्ट की पंक्तियों को गिनना चाहता था। जबकि ऊपर दिए गए कुछ उत्तरों ने काम किया, 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
यह रेगेक्स के लिए गिट द्वारा संस्करणित सभी फाइलों को खोजता है ^
, जो एक लाइन की शुरुआत का प्रतिनिधित्व करता है, इसलिए यह कमांड कुल पंक्तियों की संख्या देता है!
यह टूल 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" का अर्थ है कि यह चार समानांतर प्रक्रियाओं का उपयोग करके फ़ाइलों को पढ़ सकता है। यह वास्तव में मददगार हो सकता है यदि आप बहुत बड़ी रिपोजिटरी को स्कैन कर रहे हैं। मशीन की क्षमता के आधार पर आप प्रक्रियाओं की संख्या बढ़ा सकते हैं।
-A, बाइनरी फाइलों को टेक्स्ट के रूप में प्रोसेस करें (बाइनरी शामिल करें)
-l '', मिलान लाइनों के बजाय केवल फ़ाइल नाम दिखाएँ (केवल गैर खाली फाइलें स्कैन करें)
-I, बाइनरी फ़ाइलों (
एक्सक्लूड बाइनरी) में पैटर्न से मेल न खाएं - संलग्न, कार्य ट्री के बजाय अनुक्रमणिका में खोज करें (शामिल नहीं की गई फ़ाइलें)