কোন গিট কমিটের পরিসংখ্যানগুলি টানা সহজ


91

পূর্বে আমি একটি প্রদত্ত এসভিএন সংগ্রহস্থলের জন্য সাধারণ প্রতিশ্রুতিবদ্ধ পরিসংখ্যান উত্পন্ন করার জন্য কচ্ছপটিএসভিএন এর ক্ষমতা উপভোগ করেছি। আমি আশ্চর্য হই যে গিতে কী পাওয়া যায় এবং এতে বিশেষ আগ্রহী:

  • ব্যবহারকারী হিসাবে কমিটের সংখ্যা
  • প্রতি ব্যবহারকারী পরিবর্তিত লাইনের সংখ্যা
  • সময়ের সাথে ক্রিয়াকলাপ (উদাহরণস্বরূপ একত্রিত সাপ্তাহিক পরিবর্তনগুলি)

কোন ধারনা?

উত্তর:


197

আসলে, গিটের ইতিমধ্যে এর জন্য একটি আদেশ রয়েছে:

git shortlog

আপনার ক্ষেত্রে, মনে হচ্ছে আপনি এই ফর্মটিতে আগ্রহী:

git shortlog -sne

--helpবিভিন্ন বিকল্পের জন্য দেখুন ।

আপনি গিটস্ট্যাটস প্রকল্পেও আগ্রহী হতে পারেন । গিট প্রকল্পের পরিসংখ্যান সহ তাদের কয়েকটি উদাহরণ রয়েছে । গিটস্ট্যাট মূল পৃষ্ঠা থেকে:

এখানে বর্তমানে উত্পাদিত কিছু পরিসংখ্যানের একটি তালিকা রয়েছে:

  • সাধারণ পরিসংখ্যান: মোট ফাইল, লাইন, কমিট, লেখক।
  • ক্রিয়াকলাপ: দিনের ঘন্টা, সপ্তাহের দিন, সপ্তাহের ঘন্টা, বছরের মাস, বছর এবং মাস এবং বছর সংঘটিত হয়।
  • লেখক: লেখকের তালিকা (নাম, কমিট (%), প্রথম প্রতিশ্রুতি তারিখ, শেষ প্রতিশ্রুতি তারিখ, বয়স), মাসের লেখক, বছরের লেখক।
  • ফাইলগুলি: তারিখ অনুসারে ফাইল গণনা, এক্সটেনশনগুলি
  • লাইনগুলি: তারিখ অনুসারে কোডের লাইন

4
আমি ঠিক এটিই খুঁজছিলাম। আশ্চর্যজনক যে আপনি আমার উদাহরণস্বরূপ "গিট শর্টলগ-এসএন" দিয়ে কোড লাইনগুলি প্রতিস্থাপন করতে পারবেন এই উত্তরের জন্য ভোট দিন
জেসপার রেন-জেনসেন

13
এছাড়াও git shortlog -sn --no-mergesগণনা থেকে "একত্রীকরণ করে" মুছে ফেলুন।
lbolla

4
ফেব্রুয়ারী ২০১০: লিনাস আক্রমণ!
nnot101

25

প্রথমত, আপনাকে কোনও কিছু টানতে হবে না (যেমন নেটওয়ার্ক টান রয়েছে), কারণ স্থানীয়ভাবে আপনার সম্পূর্ণ সংগ্রহস্থল এবং পুরো ইতিহাস রয়েছে। আমি নিশ্চিত যে এমন কোনও সরঞ্জাম রয়েছে যা আপনাকে পরিসংখ্যান দেবে, তবে কখনও কখনও আপনি কমান্ড লাইনের সাহায্যে সৃজনশীল হতে পারেন। উদাহরণস্বরূপ, এটি (আমার মাথা থেকে কেবল) আপনাকে ব্যবহারকারী প্রতি কমিটের সংখ্যা দেবে:

git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'

আপনি যে অন্যান্য পরিসংখ্যানের জন্য জিজ্ঞাসা করেছেন সেগুলিতে এতে আরও চিন্তাভাবনা প্রয়োজন। আপনি উপলব্ধ সরঞ্জামগুলি দেখতে চাইতে পারেন। সরঞ্জামটির git statisticsপয়েন্টগুলির জন্য গুগলিং GitStats, যার সাথে আমার কোনও অভিজ্ঞতা নেই এবং এটি উইন্ডোতে চালানোর জন্য কী লাগে তা সম্পর্কেও কম ধারণা নেই তবে আপনি চেষ্টা করতে পারেন।


6
git shortlog -s -n(থেকে stackoverflow.com/questions/1828874/... )
naught101

4
git shortlogপ্রকৃতপক্ষে এখানেই সঠিক কমান্ডটি রয়েছে তবে এটি ছাড়াও উপরের জটিল অ্যাঙ্ক কমান্ডটি পুনরুদ্ধার করা যেতে পারে| sort | uniq -c
josch


7

এখন পর্যন্ত আমি যে সেরা সরঞ্জামটি সনাক্ত করেছি তা হ'ল গিটিনস্পেক্টর। এটি প্রতি ব্যবহারকারীর জন্য প্রতি সপ্তাহে সেট প্রতিবেদন দেয়

আপনি এনপিএম সহ নীচের মত ইনস্টল করতে পারেন

npm install -g gitinspector

লিঙ্কগুলি পেতে বিশদটি নীচে রয়েছে

https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector

উদাহরণ কমান্ড হয়

gitinspector -lmrTw
gitinspector --since=1-1-2017

ইত্যাদি


5

এই প্রশ্নের উত্তর দেওয়ার জন্য হ্যাকারকে ধন্যবাদ। যাইহোক, আমি আমার বিশেষ ব্যবহারের জন্য এই পরিবর্তিত সংস্করণগুলি আরও ভাল হিসাবে পেয়েছি:

git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r

(আমার ম্যাকের উপর কৌতুক না থাকায় অজক ব্যবহার এবং শীর্ষে সক্রিয় কমিটর দিয়ে বাছাই করা।) এটি এর মতো একটি তালিকা প্রকাশ করে:

 1205 therikss
 1026 lsteinth
  771 kmoes
  720 minielse
  507 pagerbak
  269 anjohans
  205 mfoldbje
  188 nstrandb
  133 pmoller
   58 jronn
   10 madjense
    3 nlindhol
    2 shartvig
    2 THERIKSS

আপনার কাছে ম্যাক সম্পর্কে আমার ধারণা ছিল না - কচ্ছপের উল্লেখ আমাকে উইন্ডো সম্পর্কে ভাবতে বাধ্য করে। তবে যাইহোক, আমি তোমার পথ খুঁজে পেয়ে খুশি। আমার স্নিপেটটি একটি উদাহরণ এবং একটি সূচনা পয়েন্ট ছিল।
মাইকেল ক্রেলিন - হ্যাকার

4
এটি হতে হবে sort -rn
হিউডব্রাউন

@ হুগড্রাউন, আমার জন্য -nএটি প্রয়োজনীয় নয় sort -rn। আমি একটি ম্যাক ব্যবহার করি, তবে "সাজানো সংখ্যাসূচক" আমি যে উদাহরণগুলি চেষ্টা করেছি তার জন্য কেবল কোনও পার্থক্য তৈরি করে না
জেসপার রেন-জেনসেন

এই এবং এর মধ্যে পার্থক্য কি git shortlog -sn?
পেজমান

2

নির্দিষ্ট শাখা বা দুটি হ্যাশের জন্য পরিসংখ্যান পাওয়ার উপায় এখানে রয়েছে।

কী এখানে হ্যাশ..হ্যাশ করার ক্ষমতা

নীচে আমি একটি শাখা থেকে হেড পর্যন্ত প্রথম হ্যাশ ব্যবহার করছি যা সেই শাখার শেষ।

একটি শাখায় মোট কমিটগুলি দেখান

  • গিট লগ FIRST_HASH..HEAD - ব্যাখ্যা = অনলাইন | wc -l
  • আউটপুট 53

লেখক প্রতি মোট কমিটস দেখান

  • গিট শর্টলগ FIRST_HASH..HEAD -স্নে
  • আউটপুট
  • 24 লেখকের নাম
  • 9 লেখকের নাম

2

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

এর মধ্যে অন্তর্ভুক্ত থাকবে:


2

আমি একটি ছোট শেল স্ক্রিপ্ট লিখেছি যা মার্জ পরিসংখ্যান গণনা করে (কোনও বৈশিষ্ট্য-শাখা-ভিত্তিক কর্মপ্রবাহের সাথে ডিল করার সময় দরকারী)। এখানে একটি ছোট সংগ্রহস্থলের একটি উদাহরণ আউটপুট:

[$]> git merge-stats
% of Total Merges               Author  # of Merges  % of Commits
            57.14     Daniel Beardsley            4          5.63
            42.85        James Pearson            3         30.00

এছাড়াও, আপনি যদি গিটহাবের পুল অনুরোধ সিস্টেমটি ব্যবহার করছেন, আমি গিথুব-পিআর-পরিসংখ্যান লিখেছি , যা গিট-মার্জ-পরিসংখ্যানের তুলনায় অনেক বেশি ডেটা সরবরাহ করে এবং এমনকি আপনার নিজের কোম্পানির নির্দিষ্ট বিশ্লেষণগুলিতে আপনাকে সংহত করার অনুমতি দেওয়ার জন্য একটি প্লাগিন সিস্টেম রয়েছে।
জিয়াং চিয়ামিভ


1

এখানে একটি সরল রুবি স্ক্রিপ্ট যা আমি লেখক, লাইন যুক্ত, লাইন মুছে ফেলার এবং গিট থেকে গণনা করার জন্য ব্যবহার করতাম। এটি সময়ের সাথে কমিটগুলি কভার করে না।

নোট করুন যে আমার এমন কৌশল আছে যেখানে এটি 10,000 টিরও বেশি লাইন যুক্ত / সরিয়ে দেয় এমন কোনও প্রতিশ্রুতি উপেক্ষা করে কারণ আমি ধরে নিই যে এটি কোনও ধরণের কোড আমদানি, আপনার প্রয়োজনের জন্য যুক্তি সংশোধন করতে নির্দ্বিধায় অনুভব করুন। আপনি নীচে gitstats-simple.rb নামক একটি ফাইলে রাখতে পারেন এবং তারপরে চালান

git log --numstat --pretty='%an' | ruby gitstats-simple.rb

gitstats-simple.rb এর সামগ্রী contents

#!/usr/bin/ruby

# takes the output of this on stdin: git log --numstat --prety='%an'

map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
  parts = line.split
  next if parts.size == 0
  if parts[0].match(/[a-z]+/)
    if who && memo[0] + memo[1] < 2000
      map[who][0] += memo[0]
      map[who][1] += memo[1]
      map[who][2] += 1
    end
    who = parts[0]
    memo = [0,0]
    next
  end
  if who
    memo[0]+=line[0].to_i
    memo[1]+=parts[1].to_i
  end
end

puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")

0

ডেটাহিরো এখন গিথুব ডেটা টানতে এবং পরিসংখ্যানগুলি পেতে সহজ করে। আমরা প্রতিটি মাইলফলকে আমাদের অগ্রগতি ট্র্যাক করতে অভ্যন্তরীণভাবে এটি ব্যবহার করি।

https://datahero.com/partners/github/

আমরা কীভাবে এটি অভ্যন্তরীণভাবে ব্যবহার করি: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

প্রকাশ: আমি ডেটাহিরোর জন্য কাজ করি


0

লেখক এবং তারিখের ক্রিয়াকলাপ পেতে আপনি গিটলগড মণি ( https://github.com/dexcodeinc/gitlogged ) ব্যবহার করতে পারেন । এটি আপনাকে এর মতো প্রতিবেদন দেবে:

gitlogged 2016-04-25 2016-04-26

যা নিম্নলিখিত আউটপুট প্রদান করে

################################################################

Date: 2016-04-25

Yunan (4):
      fix attachment form for IE (#4407)
      fix (#4406)
      fix merge & indentation attachment form
      fix (#4394) unexpected after edit wo

gilang (1):
      #4404 fix orders cart


################################################################
################################################################

Date: 2016-04-26

Armin Primadi (2):
      Fix document approval logs controller
      Adding git tool to generate summary on what each devs are doing on a given day for reporting purpose

Budi (1):
      remove validation user for Invoice Processing feature

Yunan (3):
      fix attachment in edit mode (#4405) && (#4430)
      fix label attachment on IE (#4407)
      fix void method (#4427)

gilang (2):
      Fix show products list in discussion summary
      #4437 define CApproved_NR status id in order


################################################################

0

Https://stackoverflow.com/a/18797915/3243930 পরিবর্তন করুন । আউটপুট গিথুবের গ্রাফ ডেটাতে অনেক বেশি বন্ধ।

#!/usr/bin/ruby

# takes the output of this on stdin: git log --numstat --prety='%an'

map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
  parts = line.split("\t")
  next if parts.size == 0
  if parts[0].match(/[a-zA-Z]+|[^\u0000-\u007F]+/)
    if who
      map[who][0] += memo[0]
      map[who][1] += memo[1]
      if memo[0] > 0 || memo[1] > 0 
        map[who][2] += 1
      end
    end
    who = parts[0]
    memo = [0,0]
    next
  end
  if who
    memo[0]+=parts[0].to_i
    memo[1]+=parts[1].to_i
  end
end

puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")

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