التي بوابة ارتكاب احصائيات سهلة لسحب
-
18-09-2019 - |
سؤال
سابقا لقد استمتعت 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
فيما يلي برنامج نصي بسيط ل 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")