গিট সংগ্রহস্থলের রেখার সংখ্যা গণনা করুন


765

গিট সংগ্রহস্থলের সমস্ত ফাইলে উপস্থিত মোট রেখার সংখ্যাটি আমি কীভাবে গণনা করব?

git ls-files গিট দ্বারা ট্র্যাক করা ফাইলগুলির একটি তালিকা আমাকে দেয়।

আমি এই catসমস্ত ফাইলের একটি কমান্ড খুঁজছি । কিছুটা এইরকম

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

উত্তর:


1138

xargs আপনি যা চান তা করবে:

git ls-files | xargs cat | wc -l

তবে আরও তথ্যের সাথে এবং সম্ভবত আরও ভাল, আপনি এটি করতে পারেন:

git ls-files | xargs wc -l

11
আমার মনে হয় তুচ্ছ; কীভাবে কেবল উত্স কোড ফাইল অন্তর্ভুক্ত করা যায় (উদাঃ * .cpp)। আমাদের কিছু বিন ফাইল প্রতিশ্রুতিবদ্ধ :)
ড্যানিয়েল

39
এর grep cpp |আগে সেখানে আটকে থাকুন xargs
কার্ল নরম

35
git ls-files -z | xargs -0 wc -lযদি আপনার নামের সাথে ফাঁকা ফাইল থাকে তবে ব্যবহার করুন ।
এমপন্টিলো

34
নির্দিষ্ট ফাইলগুলিকে অন্তর্ভুক্ত / বাদ দেওয়ার জন্য: git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -lযেখানে গ্রেপ অংশটি আপনি চান কোনও পার্ল রেজেক্স!
গ্যাব্রিয়েল

29
আপনি যদি কেবল জাভা ফাইলগুলিতে আগ্রহী হন তবে আপনি ব্যবহার করতে পারেনgit ls-files | grep "\.java$" | xargs wc -l
ডিসিবার্ট

352
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

এটি খালি গাছ থেকে আপনার বর্তমান কাজের গাছের মধ্যে পার্থক্য দেখায়। যা আপনার বর্তমান কার্যকারী গাছের সমস্ত লাইন গণনা করতে ঘটে।

আপনার বর্তমান কার্যক্ষম গাছটিতে নম্বর পেতে, এটি করুন:

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

এটি আপনাকে একটি স্ট্রিং দেবে 1770 files changed, 166776 insertions(+)


45
বিটিডাব্লু, আপনি চালিয়ে সেই হ্যাশ পেতে পারেন git hash-object -t tree /dev/null
মুহুর্তের

84
এবং আরও git diff --stat `git hash-object -t tree /dev/null`
সুসংহত

10
এটি সর্বোত্তম সলিউশন যেহেতু এটি সংরক্ষণাগার বা চিত্রগুলির মতো বাইনারি ফাইলগুলি গণনা করে না যা উপরের সংস্করণে গণনা করা হয়!
ব্রেইনস্টোন

31
বেনারি গণনা না করায় +1 আমি এই সমাধানটি আরও ভাল পছন্দ করি। এছাড়াও আমরা সত্যিই গিট ডিফার্ট আউটপুটটির শেষ লাইনে আগ্রহী:git diff --stat `git hash-object -t tree /dev/null` | tail -1
গ্যাব্রিয়েল পেট্রোনেলা

31
পরিবর্তে git diff --shortstat `git hash-object -t tree /dev/null` শেষ লাইন পেতে ব্যবহার করুন , লেজ প্রয়োজন হয় না।
জিম ওল্ফ

316

আপনি যদি এই গণনাটি চান তবে আপনি যদি প্রকল্পের ক্ষেত্রের ধারণা পেতে চান তবে আপনি সিএলওসি ("কোডের লাইন গণনা করুন") এর আউটপুট পছন্দ করতে পারেন , যা আপনাকে ভাষার দ্বারা কোডের উল্লেখযোগ্য এবং তুচ্ছ লাইনের একটি বিভ্রান্তি দেয়।

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আপনার প্যাকেজ ম্যানেজার দিয়ে - উদাহরণস্বরূপ, brew install clocসঙ্গে Homebrew

cloc $(git ls-files)প্রায়শই উন্নতি হয় cloc .। উদাহরণস্বরূপ, git ls-filesকোডের 471 লাইন রিপোর্ট সহ উপরের নমুনা আউটপুট । একই প্রকল্পের জন্য, cloc .পুরো 466,279 টি লাইন রিপোর্ট করে (এবং এটি চালাতে ছয় মিনিট সময় নেয়) কারণ এটি গিট-উপেক্ষা node_modulesফোল্ডারে নির্ভরতাগুলি অনুসন্ধান করে ।


4
টাইপস্ক্রিপ্টের মতো কিছু ভাষা সিএলওসি উপেক্ষা করে।
মার্সেলো ক্যামারগো

6
@ মার্সেলো ক্যামারগো এই মুহুর্তে টাইপস্ক্রিপ্ট সমর্থিত
আলেকজান্ডার

1
শিক্ষানবিসের জন্য, লাইনগুলি গণনা করতে "ক্লক DIRECTORY_WHERE_YOUR_GIT_IN" চালানো আরও ভাল।
শি

সম্পূর্ণ বিবরণটি এখানে: github.com/AlDanial/cloc এবং বাইনারিগুলি এখানে রয়েছে: github.com/AlDanial/cloc/relayss/tag/v1.70
পিটার জাজান্টো

15
আপনি কেবল cloc --vcs gitএই দিনগুলিতে ব্যবহার করতে পারেন , যা খারাপ নামযুক্ত ফাইলগুলি (বা তাদের মধ্যে অনেকগুলি) দিয়ে কিছু কিনার এড়িয়ে চলে।
seanf

56

git ls-files | xargs wc -lবিপুল সংখ্যক ফাইলের সাথে লেনদেন করার সময় আমি ব্যাচিংয়ের সমস্যার মুখোমুখি হয়েছি , যেখানে লাইন গণনা একাধিক totalলাইনে বিভক্ত হয়ে যাবে ।

প্রশ্ন থেকে টিপস নেওয়া ডাব্লুসি ইউটিলিটি কেন "মোট" দিয়ে একাধিক লাইন তৈরি করে? , সমস্যাটি বাইপাস করার জন্য আমি নিম্নলিখিত কমান্ডটি পেয়েছি:

wc -l $(git ls-files)

বা আপনি যদি কেবল কয়েকটি ফাইল পরীক্ষা করতে চান তবে কোড:

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


এটি দুর্দান্ত তবে এটি সাদা স্থান সহ পাথের জন্য ব্যর্থ বলে মনে হচ্ছে। সমাধান করার কোন উপায় আছে কি?
লেয়া হেইস

1
গ্রেপ '। * \। মি' বাইনারি ফাইলগুলি। এমপি 3,। এমপি 4 এর মতো বাছাইয়ের ক্ষেত্রে সমস্যা ছিল। কোড ফাইলগুলি তালিকা করতে wc -l $(git ls-files | find *.m *.h)
ফাইন্ড

3
@LeaHayes এই এক উপায় হল: wc -l --files0-from=<(git ls-files -z)<(COMMAND)সিনট্যাক্স একটি ফাইল যার বিষয়বস্তু ফল নাম ফেরৎ COMMAND
বক করুন

@ বক ধন্যবাদ, তবে আমি যখন ত্রুটি পেয়েছি যে 'কমান্ডটি প্রক্রিয়া পরিবর্তনের জন্য পাইপ তৈরি করতে পারে না: কাজটি বাস্তবায়িত হয়নি ডাব্লিউসি: অজানা বিকল্প --files0-from ='। কোন ধারনা?
লায়া হেইস

1
@ লায়ায়েস আমি এই স্ক্রিপ্টটি নিয়ে এসেছি যা আমি মনে করি যা আপনার পক্ষে কাজ করবে: `` `#! / Bin / bash ফলাফল = $ (গিট এলএস-ফাইল | xargs -d '\ n' wc -l) এর জন্য গ্র্যান্ড_টোটাল = 0 x এ $ (প্রতিধ্বনি "$ ফলাফল" | egrep '[[: সংখ্যা:]] + মোট $'); গ্র্যান্ড_টোটল + = $ (প্রতিধ্বনি "$ x" | awk '{প্রিন্ট করুন $ 1}') সম্পন্ন প্রতিধ্বনি "$ {ফলাফলগুলি}" প্রতিধ্বনি "গ্র্যান্ড টোটাল: $ {গ্র্যান্ড_টোটাল}" `` `
বক

45

আমার কাছে সর্বোত্তম সমাধানটি যাই হোক না কেন, @ মহামান্য উত্তরটির মন্তব্যে সমাহিত করা হয়েছে। আমি এটিকে এখানে কেবল টানছি যাতে এটি নজরে না যায়। এর কৃতিত্ব @FRoZeN (এবং @ পেফিয়েন্ট) এ যাওয়া উচিত।

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

কোনও অতিরিক্ত গোলমাল ছাড়াই কোনও রেপোর ওয়ার্কিং ডিরেক্টরিতে মোট ফাইল এবং লাইনগুলি প্রদান করে। বোনাস হিসাবে, কেবল উত্স কোডটি গণনা করা হয় - বাইনারি ফাইলগুলি ট্যালি থেকে বাদ থাকে।

উপরের কমান্ডটি লিনাক্স এবং ওএস এক্সে কাজ করে it এটির ক্রস প্ল্যাটফর্ম সংস্করণ

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

এটি উইন্ডোজেও কাজ করে।

রেকর্ডের জন্য, ফাঁকা লাইন বাদ দেওয়ার বিকল্পগুলি,

  • -w/ --ignore-all-space,
  • -b/ --ignore-space-change,
  • --ignore-blank-lines,
  • --ignore-space-at-eol

সাথে ব্যবহার করার সময় কোনও প্রভাব ফেলবে না --shortstat। ফাঁকা লাইন গণনা করা হয়।


1
git mktree </dev/nullবা true|git mktreeবা git mktree <&-বা :|git mktreeআমাদের মধ্যে কীস্ট্রোক-কাউন্টারে :-) জন্য - একটি অতিরিক্ত খালি গাছ রেপো প্রায় ফ্লোটিং আহত কিছু যাচ্ছে না।
jthill

2
লোকেরা ভাবছেন যে সেই হ্যাশটি নীলের বাইরে কী: স্ট্যাকওভারফ্লো.com
তেজাস কালে

19

এটি ক্লক 1.68 হিসাবে কাজ করে :

cloc --vcs=git


--vcsআমার জন্য কাজ করেনি, সম্ভবত এটি সরানো হয়েছিল। cloc .গিট রেপোতে কাজ করার সময়, ওটিওএইচ।
acdcjunior

13

আমি সেন্টিমিডারের সাথে ঘুরে বেড়াচ্ছিলাম ( http://gooseberrycreative.com/cmder/ ) এবং আমি এইচটিএমএল, সিএসএস, জাভা এবং জাভাস্ক্রিপ্টের লাইনগুলি গণনা করতে চেয়েছিলাম। উপরের কয়েকটি উত্তর কাজ করার সময়, orগ্রেপের প্যাটার্নটি পায় নি - আমি এখানে পেয়েছি ( /unix/37313/how-do-i-grep- for- মাল্টিপল- পত্রক ) এড়াতে

সুতরাং আমি এখন এটি ব্যবহার করি:

git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l


2
এটি আমার জন্য অংশগুলির সাথে প্রতিক্রিয়া বলে মনে হয়েছিল। জাস্টিন অ্যাকোয়াড্রোর সমাধানের সাথে আপনার গ্রিপ ব্যবহার করা আমার পক্ষে ভাল ফলাফল করেছিল। wc -l $ (git ls-file | grep "\ (। html \ | .css \ | .js \ |। php \ | .json \ | .sh \) $")
পিটার মার্ক

9

আমি নিম্নলিখিত ব্যবহার:

git grep ^ | wc -l

এটি রেগেক্সের জন্য গিট দ্বারা সংস্করণিত সমস্ত ফাইল সন্ধান করে ^যা একটি লাইনের সূচনা উপস্থাপন করে, সুতরাং এই কমান্ডটি মোট লাইনের সংখ্যা দেয়!


3

আমি এটা করেছি:

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

আপনি যদি সংগ্রহস্থলের সমস্ত পাঠ্য ফাইলকে আগ্রহের ফাইল হিসাবে গণনা করেন তবে এটি কাজ করে। যদি কিছু ডকুমেন্টেশন ইত্যাদি বিবেচনা করা হয়, তবে একটি বর্জনীয় ফিল্টার যুক্ত করা যেতে পারে।


3

গিথুব https://github.com/flosse/sloc এ এই সরঞ্জামটি আরও বর্ণনামূলক উপায়ে আউটপুট দিতে পারে। এটি আপনার উত্স কোডের পরিসংখ্যান তৈরি করবে:

  • শারীরিক রেখা
  • কোড লাইন (উত্স)
  • মন্তব্য সহ লাইন
  • একক লাইন মন্তব্য
  • ব্লক মন্তব্য সহ লাইন
  • উত্স এবং মন্তব্যগুলির সাথে মিশ্রিত লাইনগুলি
  • খালি লাইন

1

চেষ্টা করুন:

find . -type f -name '*.*' -exec wc -l {} + 

প্রশ্নে থাকা ডিরেক্টরি / ডিরেক্টরিতে


0
: | git mktree | git diff --shortstat --stdin

বা:

git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin

0

আপনি বাইনারি ফাইলগুলি অন্তর্ভুক্ত করতে চান কিনা তার উপর নির্ভর করে দুটি সমাধান রয়েছে।

  1. git grep --cached -al '' | xargs -P 4 cat | wc -l
  2. git grep --cached -Il '' | xargs -P 4 cat | wc -l

    "xargs -P 4" এর অর্থ এটি চারটি সমান্তরাল প্রক্রিয়া ব্যবহার করে ফাইলগুলি পড়তে পারে। আপনি যদি খুব বড় সংগ্রহস্থলগুলি স্ক্যান করে থাকেন তবে এটি সত্যিই সহায়ক হতে পারে। মেশিনের ক্ষমতা উপর নির্ভর করে আপনি প্রক্রিয়া সংখ্যা বৃদ্ধি করতে পারেন।

    -a, বাইনারি ফাইলগুলি পাঠ্য হিসাবে প্রক্রিয়াকরণ করুন (বাইনারি অন্তর্ভুক্ত করুন)
    -l '', লাইন মিলানোর পরিবর্তে কেবল ফাইলের নাম দেখান (কেবল খালি ফাইলগুলি স্ক্যান করুন)
    -আমি বাইনারি ফাইলগুলিতে নিদর্শনগুলি মেলে না (বাইনারি
    বাদে ) - ক্যাচড, কাজের গাছের পরিবর্তে সূচীতে অনুসন্ধান করুন (অনির্বাচিত ফাইলগুলি অন্তর্ভুক্ত করুন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.