कौन सा Git कमिटमेंट आँकड़े खींचना आसान है


90

पहले मैंने एक दिए गए SVN रिपॉजिटरी के लिए साधारण कमिट जनरेट करने के लिए TortoiseSvn की क्षमता का आनंद लिया है। मुझे आश्चर्य है कि Git में क्या उपलब्ध है और मैं विशेष रूप से दिलचस्पी रखता हूं:

  • प्रति उपयोगकर्ता कमिट्स की संख्या
  • प्रति उपयोगकर्ता लाइनों की संख्या बदल गई
  • समय के साथ गतिविधि (उदाहरण के लिए साप्ताहिक परिवर्तन एकत्र)

कोई विचार?

जवाबों:


197

दरअसल, git के पास इसके लिए पहले से ही एक कमांड है:

git shortlog

आपके मामले में, ऐसा लगता है कि आप इस रूप में रुचि रखते हैं:

git shortlog -sne

--helpविभिन्न विकल्पों के लिए देखें ।

आपको GitStats परियोजना में भी रुचि हो सकती है । उनके पास कुछ उदाहरण हैं, जिसमें गिट प्रोजेक्ट के आंकड़े भी शामिल हैं । GitStat मुख्य पृष्ठ से:

वर्तमान में उत्पन्न कुछ आँकड़ों की एक सूची इस प्रकार है:

  • सामान्य आँकड़े: कुल फाइलें, लाइनें, कमिट, लेखक।
  • गतिविधि: दिन के घंटे, सप्ताह के दिन, सप्ताह के घंटे, वर्ष के महीने, वर्ष और महीने, और वर्ष के अनुसार आती है।
  • लेखक: लेखकों की सूची (नाम, कमिट (%), पहली प्रतिबद्ध तिथि, अंतिम प्रतिबद्ध तिथि, आयु), महीने का लेखक, वर्ष का लेखक।
  • फ़ाइलें: फ़ाइल संख्या, एक्सटेंशन द्वारा गणना
  • पंक्तियाँ: कोड की पंक्तियाँ

1
यही वह है जिसकी तलाश में मैं हूं। कमाल है कि आप वास्तव में के साथ "Git shortlog -sn" वोट मेरे उदाहरण में कोड लाइनें इस उत्तर के लिए जगह ले सकता है
जेस्पर Ronn-जेन्सेन

13
git shortlog -sn --no-mergesगिनती से "मर्ज कमिट्स" भी हटा दें।
lbolla

4
फ़रवरी 2010: लिनुस के हमले!
n

25

सबसे पहले, आपको (नेटवर्क पुल के रूप में) कुछ भी खींचने की ज़रूरत नहीं है , क्योंकि आपके पास स्थानीय रूप से संपूर्ण भंडार और संपूर्ण इतिहास है। मुझे पूरा यकीन है कि ऐसे उपकरण हैं जो आपको आंकड़े देंगे, लेकिन कभी-कभी आप केवल कमांड लाइनों के साथ रचनात्मक हो सकते हैं। उदाहरण के लिए, यह (मेरे सिर से बाहर) आपको प्रति उपयोगकर्ता कमिट की संख्या देगा:

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

आपके द्वारा पूछे गए अन्य आँकड़ों को इसमें और अधिक विचार डालने की आवश्यकता हो सकती है। आप उपलब्ध उपकरणों को देखना चाह सकते हैं। टूल के git statisticsपॉइंट्स के लिए गुग्लिंग GitStats, जिसका मुझे कोई अनुभव नहीं है और यहां तक ​​कि इसे विंडोज़ पर चलाने के लिए क्या लगता है, इसका भी कम विचार है, लेकिन आप कोशिश कर सकते हैं।



4
git shortlogवास्तव में यहाँ सही आदेश है, लेकिन इसके बिना भी, ऊपर के जटिल awk कमांड को | sort | uniq -c
किसके

यह सच है, @ जोश।
माइकल क्रेलिन -

7

अब तक मैंने पहचाना सबसे अच्छा उपकरण gitinspector है। यह प्रति उपयोगकर्ता प्रति सप्ताह आदि की निर्धारित रिपोर्ट देता है

आप नीचे npm के साथ की तरह स्थापित कर सकते हैं

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

(awk का उपयोग करते हुए, जैसा कि मैंने अपने मैक पर gawk नहीं किया है, और शीर्ष पर सबसे सक्रिय कॉमिटर के साथ छंटनी कर रहा हूं।) यह एक सूची को आउटपुट करता है:

 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

मुझे नहीं पता था कि आपके पास मैक है - कछुए के उल्लेख ने मुझे खिड़कियों के बारे में सोचा। लेकिन वैसे भी, मुझे खुशी है कि आपने अपना रास्ता ढूंढ लिया है। मेरा स्निपेट केवल एक उदाहरण और एक प्रारंभिक बिंदु था।
माइकल क्रेलिन - हैकर 15

2
यह होना ही चाहिए sort -rn
हुग्डब्रोर्न २ 27'१२ को

मेरे लिए @hughdbrown, -nआवश्यक नहीं है sort -rn। मैं एक मैक का उपयोग करता हूं, लेकिन "सॉर्ट न्यूमेरिक" बस मेरे द्वारा आजमाए गए उदाहरणों के लिए कोई फर्क नहीं पड़ता है
जेसपर रॉन-जेनसन

इस और के बीच क्या अंतर है git shortlog -sn?
पेजमैन

2

यहां एक विशिष्ट शाखा या दो हैश के लिए आंकड़े प्राप्त करने के तरीके दिए गए हैं।

कुंजी यहाँ है एचएएच..हश करने की क्षमता

नीचे मैं एक शाखा से HEAD के लिए पहली हैश का उपयोग कर रहा हूं जो उस शाखा का अंत है।

एक शाखा में कुल कमिट दिखाएं

  • git log FIRST_HASH..HEAD - व्याख्या = ऑनलाइन | wc -l
  • आउटपुट 53

प्रति लेखक कुल प्रदर्शन दिखाएं

  • git shortlog FIRST_HASH..HEAD -sne
  • उत्पादन
  • 24 लेखक का नाम
  • 9 लेखक का नाम

2

ध्यान दें कि, यदि आपका रेपो GitHub पर है , तो आपके पास अब (मई 2013) दिलचस्प आँकड़े प्राप्त करने के लिए GitHub API का एक नया सेट है।
" फ़ाइल CRUD और रिपॉजिटरी आँकड़े अब एपीआई में उपलब्ध देखें "

जिसमें शामिल होंगे:


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

इसके अलावा, यदि आप GitHub के पुल अनुरोध प्रणाली का उपयोग कर रहे हैं, तो मैंने github-pr-आँकड़े लिखा है , जो git-merge-आँकड़े की तुलना में बहुत अधिक डेटा प्रदान करता है और यहां तक ​​कि एक प्लगइन प्रणाली भी है जो आपको अपनी कंपनी-विशिष्ट विश्लेषणों में एकीकृत करने की अनुमति देती है।
Xiong Chiamiov


1

यहाँ एक सरल रूबी लिपि है जिसका उपयोग मैंने लेखक से किया है, लाइनों को जोड़ा गया है, लाइनों को हटाया गया है, और गिट से गणना की है। यह समय के साथ कमिट को कवर नहीं करता है।

ध्यान दें कि मेरे पास एक चाल है जहां यह 10,000 से अधिक लाइनों को जोड़ने / हटाने वाली किसी भी प्रतिबद्ध को अनदेखा करता है क्योंकि मुझे लगता है कि यह किसी प्रकार का एक कोड आयात है, अपनी आवश्यकताओं के लिए तर्क को संशोधित करने के लिए स्वतंत्र महसूस करें। आप नीचे gitstats-simple.rb नामक फ़ाइल में रख सकते हैं और फिर चला सकते हैं

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

gitstats की सामग्री-simple.rb

#!/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

DataHero अब Github डेटा को खींचना और आँकड़े प्राप्त करना आसान बनाता है। हम प्रत्येक मील के पत्थर पर अपनी प्रगति को ट्रैक करने के लिए आंतरिक रूप से इसका उपयोग करते हैं।

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

हम इसे आंतरिक रूप से कैसे उपयोग करते हैं: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

प्रकटीकरण: मैं DataHero के लिए काम करता हूं


0

आप लेखक और तिथि द्वारा गतिविधियों को प्राप्त करने के लिए gitlogged gem ( 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")

0

यदि आप जीथब का उपयोग कर रहे हैं, तो पीआर काउंट योगदान आँकड़े दिखाने के लिए बनाया गया एक जीथब ऐप है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.