سؤال

سابقا لقد استمتعت TortoiseSvn القدرة على توليد بسيطة ارتكاب احصائيات معين إس مستودع.أتساءل ما هو متاح في Git و أنا مهتم بشكل خاص في :

  • عدد من يرتكب لكل مستخدم
  • عدد من خطوط غيرت لكل مستخدم
  • نشاط أكثر من الوقت (على سبيل المثال التغيرات الأسبوعية المجمعة)

أي أفكار ؟

هل كانت مفيدة؟

المحلول

في الواقع، git لديه بالفعل أمر لذلك:

git shortlog

في حالتك، يبدو أنك مهتم بهذا النموذج:

git shortlog -sne

انظر --help للحصول على خيارات مختلفة.

قد تكون مهتما أيضا مشروع Gitstats. وبعد لديهم بعض الأمثلة، بما في ذلك احصائيات لمشروع جيت. وبعد من الصفحة الرئيسية Gitstat:

فيما يلي قائمة ببعض الإحصاءات التي تم إنشاؤها حاليا:

  • الإحصاءات العامة: إجمالي الملفات والخطوط والتنزف والمؤلفين.
  • النشاط: ارتكب لمدة ساعة من اليوم، يوم الأسبوع، ساعة من الأسبوع، شهر السنة والسنة والشهر، والسنة.
  • المؤلفون: قائمة المؤلفين (الاسم، يرتكز (٪)، أول ارتكاب، تاريخ الالتزام الأخير، سن)، مؤلف شهر، مؤلف السنة.
  • الملفات: عدد الملفات حسب التاريخ والملحقات
  • الخطوط: خطوط التعليمات البرمجية حسب التاريخ

نصائح أخرى

أولا، ليس لديك يحذب أي شيء (كما هو الحال في شبكة السحب)، لأن لديك مستودع كله والسجل كله محليا. أنا متأكد من أن هناك أدوات ستمنحك إحصائيات، ولكن في بعض الأحيان يمكنك أن تكون مبدعا مع خطوط الأوامر. على سبيل المثال، فإن هذا (فقط من رأسي) سوف يمنحك عدد الالتزام لكل مستخدم:

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

إحصائيات أخرى طلبت قد تحتاج إلى مزيد من التفكير وضعت فيه. قد ترغب في رؤية الأدوات المتاحة. googling ل git statistics يشير إلى GitStats أداة، التي ليس لدي أي خبرة مع فكرة أقل من ما يلزم لإجراء تشغيله على Windows، ولكن يمكنك المحاولة.

أفضل أداة حتى الآن محسوفة هي 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

إلخ

بفضل القراصنة للإجابة على هذا السؤال. ومع ذلك، وجدت هذه الإصدارات المعدلة لتكون أفضل لاستخدامي الخاص:

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

(باستخدام AWK لأنني لا أملك GAWK على Mac Mac، والفرز مع الأكثر نشاطا في الأعلى.) يخرج قائمة مثل ذلك:

 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

فيما يلي طرق للحصول على احصائيات لفرع معين أو اثنين من الحشو.

المفتاح هنا هو القدرة على القيام التجزئة..شاش

أدناه أستخدم التجزئة الأولى من فرع إلى الرأس وهو نهاية هذا الفرع.

إظهار المجموع يرتكب في فرع

  • GIT LOG FIRD_HASH..HASH - CRETTY = ONELINE | WC -L.
  • الإخراج 53.

إظهار ارتكامات المجموع لكل مؤلف

  • git sortlog first_hash..head -sne
  • انتاج |
  • 24 اسم المؤلف
  • 9 اسم المؤلف

لاحظ أن، إذا كان ريبو الخاص بك على جيثب, ، أنت الآن (مايو 2013) لديها مجموعة جديدة من API GitHub للحصول على إحصائيات مثيرة للاهتمام.
يرى "ملف إحصائيات CRUD و مخبأة متوفرة الآن في API"

من شأنها أن تشمل:

لقد كتبت نص شل صغير الذي يحسب إحصائيات دمج (مفيدة عند التعامل مع سير عمل مقرها الفرع). إليك إخراج مثال على مستودع صغير:

[$]> 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

انظر هذا مشروع gitstat

http://mirror.celinuxforum.org/gitstat/

فيما يلي برنامج نصي بسيط ل Ruby الذي اعتدت عليه الحصول على مؤلف، وأضاف الخطوط، وإزالتها الخطوط، وارتكاب عدد من GIT. أنها لا تغطي ارتكاب مع مرور الوقت.

لاحظ أن لدي خدعة حيث يتجاهل أي ارتكاب يضيف / يزيل أكثر من 10000 خط لأنني أفترض أن هذا هو استيراد التعليمات البرمجية من نوع ما، فلا تتردد في تعديل المنطق لاحتياجاتك. يمكنك وضع أدناه في ملف يسمى 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")

DataHero الآن يجعل من السهل سحب في جيثب البيانات والحصول على احصائيات.ونحن استخدامه داخليا لتتبع التقدم الذي أحرزناه على كل معلم.

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

كيف يمكننا استخدامه داخليا: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

الإفصاح:أنا أعمل DataHero

يمكنك استخدام جوهرة gitlogged (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


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

تعديل 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")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top