গিট সংগ্রহস্থলের কোনও নির্দিষ্ট লেখকের দ্বারা পরিবর্তিত মোট রেখাগুলি কীভাবে গণনা করবেন?


457

আমি কি অনুরোধ করতে পারি যে গিট সংগ্রহস্থলটিতে কোনও নির্দিষ্ট লেখকের পরিবর্তিত রেখাগুলি গণনা করবে? আমি জানি যে কমিটের সংখ্যা গণনা করার উপায় থাকতে হবে কারণ গিথুব তাদের প্রভাব গ্রাফের জন্য এটি করে।


1
আপনি লিনাক্স কার্নেল বিকাশের পরিসংখ্যান সংগ্রহকারী বিখ্যাত সরঞ্জাম বিবেচনা করতে পারেন, উদাহরণস্বরূপ, সংগ্রহস্থলটি এখানে git://git.lwn.net/gitdm.git
এন্ড্রি

উত্তর:


310

নিচের কমান্ডটির আউটপুট মোট যোগ করতে স্ক্রিপ্টে প্রেরণে যুক্তিসঙ্গতভাবে সহজ হওয়া উচিত:

git log --author="<authorname>" --oneline --shortstat

এটি বর্তমান হেডে সমস্ত কমিটির পরিসংখ্যান দেয়। আপনি যদি অন্য শাখায় পরিসংখ্যান যুক্ত করতে চান তবে আপনাকে সেগুলি যুক্তি হিসাবে সরবরাহ করতে হবে git log

কোনও স্ক্রিপ্টে যাওয়ার জন্য, এমনকি "অনলাইনলাইন" ফর্ম্যাট অপসারণ করা খালি লগ বিন্যাসের সাহায্যে করা যেতে পারে, এবং জাকুব নারাবস্কির মন্তব্য অনুসারে, --numstatএটি অন্য বিকল্প। এটি প্রতি-লাইন পরিসংখ্যানের চেয়ে প্রতি-ফাইল উত্পন্ন করে তবে পার্স করা আরও সহজ।

git log --author="<authorname>" --pretty=tformat: --numstat

2
আমার গ্রহণযোগ্য উত্তর পরিবর্তন হয়েছে যেহেতু এটি আমার প্রত্যাশা মতো আউটপুট দেয় এবং এটি অর্জনের জন্য খুঁজছেন এমন অন্যান্য দর্শকদের আরও সহায়ক হবে।
গাভ

14
আপনি কিছুটা সহজ পরিসংখ্যান যোগ করতে চাইলে আপনি তার --numstatপরিবর্তে ব্যবহার করতে পারেন --shortstat
জাকুব নারেবস্কি

8
সেখানেও "- না-মার্জ" যুক্ত করতে চাই।
ইয়োও

9
এই প্রশ্নের জন্য দুঃখিত, কিন্তু নম্বরগুলি আমাকে কী বলছে? দুটি সারি রয়েছে এবং তারা আমাকে কী বলছে তা আমার কোনও ধারণা নেই। লাইনে চেঞ্জ করে যুক্ত হয়েছে?
Informatic0re

2
@ ইনফরম্যাটিক0 git help logরে আমাকে বলে যে প্রথম লাইন যুক্ত হয়, দ্বিতীয় লাইন মুছে ফেলা হয়।
টমাসএইচ

599

এটি লেখক সম্পর্কে কিছু পরিসংখ্যান দেয়, প্রয়োজন অনুসারে পরিবর্তন করুন।

গাওক ব্যবহার:

git log --author="_Your_Name_Here_" --pretty=tformat: --numstat \
| gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }' -

ম্যাক ওএসএক্সে অ্যাওক ব্যবহার করা:

git log --author="_Your_Name_Here_" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -

সম্পাদনা (2017)

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

এটি গিট-কুইক-স্ট্যাটাস (গিথুব লিঙ্ক)

git-quick-statsএকটি ফোল্ডারে অনুলিপি করুন এবং ফোল্ডারটিকে পথে যুক্ত করুন।

mkdir ~/source
cd ~/source
git clone git@github.com:arzzen/git-quick-stats.git
mkdir ~/bin
ln -s ~/source/git-quick-stats/git-quick-stats ~/bin/git-quick-stats
chmod +x ~/bin/git-quick-stats
export PATH=${PATH}:~/bin

ব্যবহার:

git-quick-stats

এখানে চিত্র বর্ণনা লিখুন


18
এই সুদৃশ্য দীর্ঘ লাইনার জন্য ধন্যবাদ! আজকের এই স্থানটি প্রত্যেকের ডেককে স্যুট করেছে (সঠিক, দ্রুত, কোনও অতিরিক্ত অদ্ভুত আউটপুট নেই)। অবাক হওয়ার মতো বিষয় নয়, এটি বিবেচনা করে যেভাবে সাজানো জিনিসটি ডিজাইনের জন্য ডিজাইন করা হয়েছিল ... খুব খারাপ আপনি পার্টিতে এতটা দেরি করেছিলেন।
zxq9

4
@ জেডএক্সকিউ ৯: যখন প্রশ্ন জিজ্ঞাসা করা হয়েছিল তখনও আমি স্ট্যাকওভারফ্লোতে ছিলাম না এবং আমি এখানে উত্তরগুলি দ্বারা অনুপ্রাণিত হয়েছিলাম। আসুন আশা করি লোকেরা যেমন প্রয়োজন রাখে আমি আস্তে আস্তে এখানে সবাইকে ছাড়ব।
অ্যালেক্স

9
এটি দুর্দান্ত কাজ করে, তবে ওএসএক্স টার্মিনালে এটি কাজ করতে আমাকে পরিবর্তন gawkকরতে awkহয়েছিল
জ্যাচ লিসোবে

1
@ সাম্তিবেস্ট, কারণ চলন্ত ফাইলটি সঠিক পরিসংখ্যানকে প্রতিফলিত করে না। লাইন পরিবর্তন করা হয় না। অ্যালেক্সের কাছে: আমি গীটের কথা বলছি। বিটিডব্লিউ, মূল প্রশ্নের আমার মন্তব্য দেখুন।
0

2
যদি url আপনার পক্ষে কাজ করে না, তবে এটি চেষ্টা করুন:git clone https://github.com/arzzen/git-quick-stats.git
নিকোলাস

226

যদি কেউ তাদের কোডবেসে প্রতিটি ব্যবহারকারীর পরিসংখ্যান দেখতে চায় তবে আমার সহকর্মী দু'জন সম্প্রতি এই ভয়াবহ ওয়ান-লাইনার নিয়ে এসেছেন:

git log --shortstat --pretty="%cE" | sed 's/\(.*\)@.*/\1/' | grep -v "^$" | awk 'BEGIN { line=""; } !/^ / { if (line=="" || !match(line, $0)) {line = $0 "," line }} /^ / { print line " # " $0; line=""}' | sort | sed -E 's/# //;s/ files? changed,//;s/([0-9]+) ([0-9]+ deletion)/\1 0 insertions\(+\), \2/;s/\(\+\)$/\(\+\), 0 deletions\(-\)/;s/insertions?\(\+\), //;s/ deletions?\(-\)//' | awk 'BEGIN {name=""; files=0; insertions=0; deletions=0;} {if ($1 != name && name != "") { print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net"; files=0; insertions=0; deletions=0; name=$1; } name=$1; files+=$2; insertions+=$3; deletions+=$4} END {print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net";}'

(আমাদের রেপোতে ক্র্যাঞ্চ করতে কয়েক মিনিট সময় নেয়, যার প্রায় 10-15k কমিট থাকে))


12
সেটা খুবই ভালো! michael,: 6057 files changed, 854902 insertions(+), 26973 deletions(-), 827929 net
মাইকেল জে। ক্যালকিন্স

1
@ ইউজেনকনকভ কোডটিতে এটি সন্নিবেশ - মুছে ফেলা হিসাবে সংজ্ঞায়িত করা হয়েছে।
ড্যান

13
এটি একমাত্র কমান্ড যা কোনও সংগ্রহস্থলের জন্য মোট ফলাফল দেয় এবং কোনও প্লাগইন ছাড়াই চলে।
Farমার ফারুক আলমালি

1
আমি একসাথে তালিকাভুক্ত বেশ কয়েকটি ব্যবহারকারী পাচ্ছি, প্রায় প্রতিটি সম্ভাব্য সংমিশ্রণ বিকাশকারীগণ ফিরে আসছেন। আমার শেষ অবসান?
দামন

2
@ বেনসওয়ার্ডস আপনি লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম ব্যবহার করে উইন্ডোজে ব্যাশ ব্যবহার করতে পারেন, এখানে
এমজেএসআর

152

গীত খ্যাতি https://github.com/oleender/git-fame-rb

কমিট এবং সংশোধিত ফাইল গণনা সহ একযোগে সমস্ত লেখকের জন্য গণনা পাওয়ার জন্য একটি দুর্দান্ত সরঞ্জাম:

sudo apt-get install ruby-dev
sudo gem install git_fame
cd /path/to/gitdir && git fame

Https://github.com/casperdcl/git-fame (@ ফ্র্যাক দ্বারা উল্লিখিত) তে পাইথন সংস্করণও রয়েছে :

sudo apt-get install python-pip python-dev build-essential 
pip install --user git-fame
cd /path/to/gitdir && git fame

নমুনা আউটপুট:

Total number of files: 2,053
Total number of lines: 63,132
Total number of commits: 4,330

+------------------------+--------+---------+-------+--------------------+
| name                   | loc    | commits | files | percent            |
+------------------------+--------+---------+-------+--------------------+
| Johan Sørensen         | 22,272 | 1,814   | 414   | 35.3 / 41.9 / 20.2 |
| Marius Mathiesen       | 10,387 | 502     | 229   | 16.5 / 11.6 / 11.2 |
| Jesper Josefsson       | 9,689  | 519     | 191   | 15.3 / 12.0 / 9.3  |
| Ole Martin Kristiansen | 6,632  | 24      | 60    | 10.5 / 0.6 / 2.9   |
| Linus Oleander         | 5,769  | 705     | 277   | 9.1 / 16.3 / 13.5  |
| Fabio Akita            | 2,122  | 24      | 60    | 3.4 / 0.6 / 2.9    |
| August Lilleaas        | 1,572  | 123     | 63    | 2.5 / 2.8 / 3.1    |
| David A. Cuadrado      | 731    | 111     | 35    | 1.2 / 2.6 / 1.7    |
| Jonas Ängeslevä        | 705    | 148     | 51    | 1.1 / 3.4 / 2.5    |
| Diego Algorta          | 650    | 6       | 5     | 1.0 / 0.1 / 0.2    |
| Arash Rouhani          | 629    | 95      | 31    | 1.0 / 2.2 / 1.5    |
| Sofia Larsson          | 595    | 70      | 77    | 0.9 / 1.6 / 3.8    |
| Tor Arne Vestbø        | 527    | 51      | 97    | 0.8 / 1.2 / 4.7    |
| spontus                | 339    | 18      | 42    | 0.5 / 0.4 / 2.0    |
| Pontus                 | 225    | 49      | 34    | 0.4 / 1.1 / 1.7    |
+------------------------+--------+---------+-------+--------------------+

তবে সতর্কতা অবলম্বন করুন: মন্তব্যে জ্যারেড যেমন উল্লেখ করেছেন, এটি খুব বড় সংগ্রহস্থলে করতে কয়েক ঘন্টা সময় লাগবে। এটি এত উন্নত হতে পারে কিনা তা নিশ্চিত নন, এটি এত পরিমাণ গিট ডেটা প্রক্রিয়া করা উচিত considering


1
এটি দুর্দান্ত কিন্তু এত ধীর
জারেড বুরোস

1
২০১৫ সালের মাঝামাঝি ম্যাকবুক এবং মাঝারি বৃহত অ্যান্ড্রয়েড প্রকল্পে (127 কে এলওসি 'রয়েছে) ভাল কাজ করেছে। মিনিট দম্পতি.
ম্যাক্সওয়েবার

2
@ বর্তমান ব্যবহারকারীর জন্য টোল লোক / কমিট / ফাইলের ভিনসেন্ট শতাংশ।
সিরো সান্তিলি 法轮功 冠状 病 六四 事件 法轮功

1
শাখা, সময়সীমা পরিবর্তন এবং একটি ফোল্ডার বাদ দিন:git fame --branch=dev --timeout=-1 --exclude=Pods/*
jonmecer

1
@ আলেকজান্ডারমিলগুলি আমি অনুমান করছি এটি কারণ আপনি ব্লবগুলিতে অর্থপূর্ণভাবে লাইনগুলি গণনা করতে পারবেন না
সিওরো সান্তিলি :10 冠状 病 六四 事件 法轮功

103

নিম্নলিখিতটি বর্তমানে কোড বেসে সর্বাধিক রেখাগুলি ছিল তা দেখতে আমি দরকারী বলে মনে করেছি:

git ls-files -z | xargs -0n1 git blame -w | ruby -n -e '$_ =~ /^.*\((.*?)\s[\d]{4}/; puts $1.strip' | sort -f | uniq -c | sort -n

অন্যান্য উত্তরগুলি বেশিরভাগই কমিটগুলিতে পরিবর্তিত লাইনের দিকে দৃষ্টি নিবদ্ধ করে, তবে যদি কমিটগুলি বেঁচে না থাকে এবং ওভাররাইট করা হয় তবে সেগুলি সম্ভবত মন্থর হয়ে উঠেছে। উপরের উত্কর্ষটি আপনাকে সমস্ত প্রতিশ্রুতিবদ্ধদের একসাথে কেবলমাত্র একটির পরিবর্তে লাইন অনুসারে বাছাই করে। ফাইলকে কিছুটা আরও ভাল নম্বর পেতে ফাইল-গ্লোবাল (লিমিটেড-সি-এম) -র জন্য কিছু বিকল্প যুক্ত করতে পারেন যা ফাইলগুলির মধ্যে ফাইলের চলাচল এবং লাইন চলাচল করে, তবে আপনি যদি কমান্ডটি আরও বেশি দিন চালাতে পারেন তবে longer

এছাড়াও, যদি আপনি সমস্ত প্রতিশ্রুতিবদ্ধদের জন্য সমস্ত চুক্তিতে পরিবর্তিত রেখাগুলি সন্ধান করে থাকেন তবে নীচের লিখিত লিপিটি সহায়ক:

http://git-wt-commit.rubyforge.org/#git-rank-contributors


31
আমি একটি +1 দিতে যাচ্ছিলাম, তবে তখন বুঝতে পারলাম সমাধানটি রুবি থেকে নির্ভর করে ... :(
ম্যাক

3
রুবি ব্যবহার করতে আপনি সহজেই এটি পরিবর্তন করতে পারেন যেহেতু আমি কেবল স্ট্রিং প্রতিস্থাপনের জন্য রুবি ব্যবহার করি। আপনি পার্ল,
সেড

21
আমার জন্য কাজ করে না: -e: 1: in main <main> ': ইউটিএফ -8 (আর্গুমেন্ট
এরির

1
/^.*\((.*?)\s[\d]{4}//^.*?\((.*?)\s[\d]{4}/উত্স মধ্যে একটি লেখক হিসাবে ম্যাচিং বন্ধনী প্রতিরোধ করা উচিত ।
টিমোথি গু

1
মিমি আমার মৃত্যুদন্ড কার্যকর করার কারণে খারাপ পার্সিংয়ের কারণে প্রচুর ব্যবহারকারীর উপস্থিতি উপস্থিত নেই even আমি মনে করি এটি নির্ভরযোগ্য উত্তর নয়।
mjsr

92

সংখ্যা গণনা করার জন্য করে একটি প্রদত্ত শাখা আপনি ব্যবহার করতে পারেন একটি নির্দিষ্ট লেখক (অথবা সমস্ত লেখক) দ্বারা Git-shortlog ; বিশেষত এর --numberedএবং --summaryবিকল্পগুলি দেখুন, উদাহরণস্বরূপ যখন গিট সংগ্রহস্থলটিতে চালানো হয়:

$ git shortlog v1.6.4 --numbered --summary
  6904  Junio C Hamano
  1320  Shawn O. Pearce
  1065  Linus Torvalds
    692  Johannes Schindelin
    443  Eric Wong

2
দ্রষ্টব্য যে v1.6.4এই উদাহরণটিতে আউটপুট নির্ধারণকারী করতে এখানে: আপনি যখন ক্লোন এবং / অথবা গিট সংগ্রহস্থল থেকে আনেন তখন তা একই রকম হবে।
জাকুব নরবস্কি

সহ v1.6.4আমাকে দেয়:fatal: ambiguous argument 'v1.6.4': unknown revision or path not in the working tree.
ইম্পালাকে

5
আহ, না, আমি "গিটার সংগ্রহস্থল চালানোর সময়" মিস করেছি। পরিষ্কার করা, অধিকাংশ লোক অভ্যস্ত Git রেপো এই কমান্ড চালানো। আসলে বেশ বড় ব্যবধানে।
ইম্পালা

4
git shortlog -sneঅথবা, আপনি যদি মার্জগুলিকে অন্তর্ভুক্ত না করেনgit shortlog -sne --no-merges
মার্ক সোয়ার্ডস্ট্রম

1
@Swards: -sহয় --summary, -nহয় --numbered, এবং [নতুন] -eহয় --emailলেখক ইমেল দেখানোর জন্য (এবং আলাদাভাবে আলাদা ইমেল ঠিকানা দিয়ে একই লেখক গণনা একাউন্টে গ্রহণ .mailmapসংশোধন)। সম্পর্কে ভাল কল --no-merges
জাকুব নরবস্কি

75

দেখার পরও কি Alex এর এবং Gerty3000 এর উত্তর, আমি এক-লাইনের কমান চেষ্টা করেছি:

মূলত, গিট লগ নম্বস্ট্যাট ব্যবহার করা এবং ফাইলগুলির সংখ্যা ট্র্যাক না করা পরিবর্তন করা ।

ম্যাক ওএসএক্স-এ গিট সংস্করণ ২.১.০:

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

উদাহরণ:

Jared Burrows   added lines: 6826, removed lines: 2825, total lines: 4001

এটির একটি উপকরণ তৈরি করতে পারেন :-(
ব্রাত

33

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

এই ছোট্ট পরিবর্তনটি আমার জন্য সমস্যাটি স্থির করে:

git ls-files -z | xargs -0n1 git blame -w --show-email | perl -n -e '/^.*?\((.*?)\s+[\d]{4}/; print $1,"\n"' | sort -f | uniq -c | sort -n

+ পরে Notice গুলি লক্ষ্য করুন যা নাম থেকে শুরু করে তারিখ পর্যন্ত সমস্ত শ্বেতক্ষেত্র গ্রাস করবে।

আসলে এই উত্তরটি আমার নিজের স্মরণে রাখার জন্য যত বেশি অন্য কাউকে সাহায্য করার জন্য যুক্ত করা, যেহেতু আমি অন্তত দ্বিতীয় বার বিষয়টি গুগল করছি :)

  • 2019-01-23 সম্পাদনা করুন পরিবর্তে ইমেলগুলিকে একত্রিত --show-emailকরার git blame -wজন্য যুক্ত করা হয়েছে, যেহেতু কিছু লোক Nameবিভিন্ন কম্পিউটারে বিভিন্ন ফর্ম্যাট ব্যবহার করে এবং কখনও কখনও একই নামের দুটি ব্যক্তি একই গিটে কাজ করে।

পার্ল ব্যবহার করে এই উত্তরটি রুবি ভিত্তিক চেয়ে কিছুটা ভাল ভাড়া নিয়ে হাজির হয়েছিল। রুবি এমন লাইনে চাপা পড়েছিল যা প্রকৃত UTF-8 পাঠ্য ছিল না, পার্ল কোনও অভিযোগ করেনি। তবে পার্ল কি সঠিক কাজ করেছে? আমি জানি না।
স্টাফেন গরিখন

সাবমডিউলগুলির ফলাফল ঘটে unsupported file typeতবে অন্যথায় এটি তাদের সাথে ঠিক ঠিক কাজ করে বলে মনে হয় (এটি এড়িয়ে যায়)।
ভ্লাদিমার অুনাট

24

এখানে একটি সংক্ষিপ্ত ওয়ান-লাইনার যা সমস্ত লেখকের জন্য পরিসংখ্যান তৈরি করে। এটি উপরের https://stackoverflow.com/a/20414465/1102119 এ ড্যানের সমাধানের চেয়ে অনেক দ্রুত (খনিতে ও (এনএম) এর পরিবর্তে টাইম জটিলতা ও (এন) রয়েছে যেখানে এন কমিটের সংখ্যা এবং এম লেখকের সংখ্যা )।

git log --no-merges --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = ""; next } END { for (a in ins) { printf "%10d %10d %10d %s\n", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn

4
চমৎকার তবে আউটপুট বলতে কী বোঝায়?
গ্যারি উইলফবি

আপনার যুক্ত করা উচিত --no-show-signature, অন্যথায় লোকেরা যারা তাদের পিজিপি-সাইন দিয়ে তাদের প্রতিশ্রুতিগুলি গণনা করা হচ্ছে না।
ফিলিহপ বুসবি

2
ইনস [এ] - ডেল [এ], ইনস [এ], ডেল [এ], এ, তাই যদি আমি সঠিকভাবে সন্নিবেশ-মোছা, সন্নিবেশ, মুছে ফেলা, নাম
মিঃ কেকসন

আমি কীভাবে এই আদেশটি আমার গিট কনফিগারেশনে যুক্ত করতে পারি যাতে আমি এটিকে "গিট কাউন্ট-লাইন" দিয়ে কল করতে পারি?
টাকানুভা 15

কিছু মনে করবেন না, আমি এটা মূর্ত আউট: count-lines = "!f() { git log --no-merges --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = \"\"; next } END { for (a in ins) { printf \"%10d %10d %10d %s\\n\", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn; }; f"। (দ্রষ্টব্য আমি উইন্ডোজে আছি; আপনার বিভিন্ন ধরণের উদ্ধৃতি ব্যবহারের প্রয়োজন হতে পারে)
তাকানুভা 15

21

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

যখন কিছু লাইন বৈধ ইউটিএফ -8 পাঠ্যটি বৈধ নয় এবং যখন কিছু লাইনগুলি রেজিএক্সএক্সের সাথে মেলে (এটি এখানে ঘটেছিল) তখন এটি একটি সমস্যা।

এখানে এমন একটি পরিবর্তিত রেখা রয়েছে যাতে এই সমস্যাগুলি নেই। এটি আলাদা লাইনগুলিতে পরিষ্কারভাবে আউটপুট ডেটে গিটকে অনুরোধ করে, যা আমাদের দৃ what়তার সাথে ফিল্টার করা সহজ করে তোলে:

git ls-files -z | xargs -0n1 git blame -w --line-porcelain | grep -a "^author " | sort -f | uniq -c | sort -n

আপনি অন্যান্য স্ট্রিং, যেমন লেখক-মেল, প্রতিশ্রুতিবদ্ধ ইত্যাদির জন্য গ্রেপ করতে পারেন

বাইট-লেভেল প্রসেসিংকে বাধ্য করার জন্য সম্ভবত প্রথমে export LC_ALL=C(অনুমান করে bash) করুন ( এটি ইউটিএফ -8-ভিত্তিক লোকেলগুলি থেকে গ্রেপটি প্রচন্ডভাবে গতিতে ঘটবে)।


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

1
@ অ্যারোনএম আমি আপনার সমালোচনা বুঝতে পারি না। এই লাইন AFAIK আপনার হিসাবে একই পরিসংখ্যান আউটপুট, শুধুমাত্র আরও শক্তিশালী। সুতরাং, যদি আমার উত্তর "মূল পোস্টার অনুরোধ করে তা করতে ব্যর্থ হয়, গিটের লেখক দ্বারা একটি গণনা সরবরাহ করুন", তবে আপনার আরও বেশি। আমাকে আলোকিত করুন।
স্টাফেন গৌরিচন

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

এটি এত দুর্দান্ত। ধন্যবাদ!
টেক

16

মাঝখানে রুবি দিয়ে একটি সমাধান দেওয়া হয়েছিল, পারলটি এখানে ডিফল্টরূপে আরও কিছুটা সহজলভ্য হওয়ায় লেখকের বর্তমান লাইনের জন্য পার্ল ব্যবহার করার বিকল্প।

git ls-files -z | xargs -0n1 git blame -w | perl -n -e '/^.*\((.*?)\s*[\d]{4}/; print $1,"\n"' | sort -f | uniq -c | sort -n

5
আপডেট করা রেজেক্স অর্থপূর্ণ পার্থক্য তৈরি করে না, এবং আপনি প্রথম পেরেনকে এড়িয়ে চলার কারণে এটি ভেঙে যায়। তবে আমি এমন কিছু ক্ষেত্রে দেখতে পাচ্ছি যেখানে আমার আগেরটি কোড ল্যাচ করার জন্য কোডের লাইনে কিছু বিট খুঁজে পেতে পারে find এটি আরও নির্ভরযোগ্যভাবে কাজ করবে: git ls-ফাইল -z | xargs -0n1 গিট দোষ -w | perl -n -e '/^.*?\((.*?)\ssel\dod{4}/; মুদ্রণ করুন $ 1, "\ n"' | বাছাই -f | uniq -c | সাজানো -n
অ্যারোনএম

একটি আরও নির্ভরযোগ্য regexp চেষ্টা করার জন্য ধন্যবাদ। একটি আরো জোরালো বৈকল্পিক জন্য আমার উত্তর দেখুন stackoverflow.com/a/36090245/1429390
Stéphane Gourichon

13

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

উদাহরণ হিসেবে বলা যায়, এখানে একটি কমিট ফাইল প্রচুর আমার প্রকল্প, যখন ব্যবহার এক থেকে প্রায় সরানো হচ্ছে git log --oneline --shortstatকমান্ড প্রয়োগ করুন:

9052459 Reorganized project structure
 43 files changed, 1049 insertions(+), 1000 deletions(-)

এবং এখানে একই git log --oneline --shortstat -Cকমান্ডটি ব্যবহার করে যা ফাইল অনুলিপি এবং পুনরায় নাম সনাক্ত করে:

9052459 Reorganized project structure
 27 files changed, 134 insertions(+), 85 deletions(-)

আমার মতে এই প্রকল্পটির উপর কোনও ব্যক্তি কতটা প্রভাব ফেলেছে তার উত্তরোত্তর আরও বাস্তবসম্মত দৃষ্টিভঙ্গি দেয় কারণ একটি ফাইলের নাম পরিবর্তন করা ফাইলটি স্ক্র্যাচ থেকে লেখার চেয়ে অনেক ছোট অপারেশন।


2
আমি যখন "গিট লগ --অনলাইন - শর্টস্যাট্যাট" চালিত করি তখন আমি আপনার ফলাফল পাই না। সংস্করণের সংখ্যা নিয়ে আমার কাছে প্রতিশ্রুতির একটি তালিকা রয়েছে তবে মোট সংখ্যা নয়। সমস্ত গিট সংগ্রহস্থলে সম্পাদিত মোট লাইনগুলির সংখ্যা আমি কীভাবে পেতে পারি?
মেহেদি

12

আপনি হুডিড ব্যবহার করতে পারেন ( https://www.npmjs.com/package/ whodid )

$ npm install whodid -g
$ cd your-project-dir

এবং

$ whodid author --include-merge=false --path=./ --valid-threshold=1000 --since=1.week

বা শুধু টাইপ করুন

$ whodid

তাহলে আপনি এর মতো ফলাফল দেখতে পাবেন

Contribution state
=====================================================
 score  | author
-----------------------------------------------------
 3059   | someguy <someguy@tensorflow.org>
 585    | somelady <somelady@tensorflow.org>
 212    | niceguy <nice@google.com>
 173    | coolguy <coolgay@google.com>
=====================================================

'স্কোর' বলতে কী বোঝায়?
ব্যবহারকারী 11171

@ ভোলতে এনপিএম আমি এনপিএম ইনস্টলের জন্য একটি শর্টকাট
মিশিগেল

হ্যাঁ, আমি সচেতন আমার -gপ্যাকেজ নাম আগে আসতে হবে macOS। সহজভাবে সাহায্য করার চেষ্টা করা।
ভোল্ট

11

এখানে একটি তাত্ক্ষণিক রুবি স্ক্রিপ্ট যা প্রদত্ত লগ ক্যোয়ারির বিপরীতে ব্যবহারকারীর প্রতি প্রভাবকে ছাঁটাই করে।

উদাহরণস্বরূপ, রুবিনিয়াসের জন্য :

Brian Ford: 4410668
Evan Phoenix: 1906343
Ryan Davis: 855674
Shane Becker: 242904
Alexander Kellett: 167600
Eric Hodel: 132986
Dirkjan Bussink: 113756
...

এই পান্ডুলিপি:

#!/usr/bin/env ruby

impact = Hash.new(0)

IO.popen("git log --pretty=format:\"%an\" --shortstat #{ARGV.join(' ')}") do |f|
  prev_line = ''
  while line = f.gets
    changes = /(\d+) insertions.*(\d+) deletions/.match(line)

    if changes
      impact[prev_line] += changes[1].to_i + changes[2].to_i
    end

    prev_line = line # Names are on a line of their own, just before the stats
  end
end

impact.sort_by { |a,i| -i }.each do |author, impact|
  puts "#{author.strip}: #{impact}"
end

2
এই স্ক্রিপ্টটি দুর্দান্ত, তবে কেবলমাত্র একক লাইনের কমিট রয়েছে এমন লেখককে বাদ দিয়েছে! ঠিক করতে, নীচের হিসাবে পরিবর্তন করুন: পরিবর্তনগুলি = / (\ d +) সন্নিবেশ। * (\ D +) মোছা / .ম্যাচ (লাইন)
ল্যারি

8

এটি সেরা উপায় এবং এটি আপনাকে সমস্ত ব্যবহারকারীর দ্বারা কমিটের সংখ্যার একটি পরিষ্কার চিত্র দেয়

git shortlog -s -n

2
দরকারী, তবে
কমিটের সংখ্যাটি

5

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

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $dir = shift;

die "Please provide a directory name to check\n"
    unless $dir;

chdir $dir
    or die "Failed to enter the specified directory '$dir': $!\n";

if ( ! open(GIT_LS,'-|','git ls-files') ) {
    die "Failed to process 'git ls-files': $!\n";
}
my %stats;
while (my $file = <GIT_LS>) {
    chomp $file;
    if ( ! open(GIT_LOG,'-|',"git log --numstat $file") ) {
        die "Failed to process 'git log --numstat $file': $!\n";
    }
    my $author;
    while (my $log_line = <GIT_LOG>) {
        if ( $log_line =~ m{^Author:\s*([^<]*?)\s*<([^>]*)>} ) {
            $author = lc($1);
        }
        elsif ( $log_line =~ m{^(\d+)\s+(\d+)\s+(.*)} ) {
            my $added = $1;
            my $removed = $2;
            my $file = $3;
            $stats{total}{by_author}{$author}{added}        += $added;
            $stats{total}{by_author}{$author}{removed}      += $removed;
            $stats{total}{by_author}{total}{added}          += $added;
            $stats{total}{by_author}{total}{removed}        += $removed;

            $stats{total}{by_file}{$file}{$author}{added}   += $added;
            $stats{total}{by_file}{$file}{$author}{removed} += $removed;
            $stats{total}{by_file}{$file}{total}{added}     += $added;
            $stats{total}{by_file}{$file}{total}{removed}   += $removed;
        }
    }
    close GIT_LOG;

    if ( ! open(GIT_BLAME,'-|',"git blame -w $file") ) {
        die "Failed to process 'git blame -w $file': $!\n";
    }
    while (my $log_line = <GIT_BLAME>) {
        if ( $log_line =~ m{\((.*?)\s+\d{4}} ) {
            my $author = $1;
            $stats{final}{by_author}{$author}     ++;
            $stats{final}{by_file}{$file}{$author}++;

            $stats{final}{by_author}{total}       ++;
            $stats{final}{by_file}{$file}{total}  ++;
            $stats{final}{by_file}{$file}{total}  ++;
        }
    }
    close GIT_BLAME;
}
close GIT_LS;

print "Total lines committed by author by file\n";
printf "%25s %25s %8s %8s %9s\n",'file','author','added','removed','pct add';
foreach my $file (sort keys %{$stats{total}{by_file}}) {
    printf "%25s %4.0f%%\n",$file
            ,100*$stats{total}{by_file}{$file}{total}{added}/$stats{total}{by_author}{total}{added};
    foreach my $author (sort keys %{$stats{total}{by_file}{$file}}) {
        next if $author eq 'total';
        if ( $stats{total}{by_file}{$file}{total}{added} ) {
            printf "%25s %25s %8d %8d %8.0f%%\n",'', $author,@{$stats{total}{by_file}{$file}{$author}}{qw{added removed}}
            ,100*$stats{total}{by_file}{$file}{$author}{added}/$stats{total}{by_file}{$file}{total}{added};
        } else {
            printf "%25s %25s %8d %8d\n",'', $author,@{$stats{total}{by_file}{$file}{$author}}{qw{added removed}} ;
        }
    }
}
print "\n";

print "Total lines in the final project by author by file\n";
printf "%25s %25s %8s %9s %9s\n",'file','author','final','percent', '% of all';
foreach my $file (sort keys %{$stats{final}{by_file}}) {
    printf "%25s %4.0f%%\n",$file
            ,100*$stats{final}{by_file}{$file}{total}/$stats{final}{by_author}{total};
    foreach my $author (sort keys %{$stats{final}{by_file}{$file}}) {
        next if $author eq 'total';
        printf "%25s %25s %8d %8.0f%% %8.0f%%\n",'', $author,$stats{final}{by_file}{$file}{$author}
            ,100*$stats{final}{by_file}{$file}{$author}/$stats{final}{by_file}{$file}{total}
            ,100*$stats{final}{by_file}{$file}{$author}/$stats{final}{by_author}{total}
        ;
    }
}
print "\n";


print "Total lines committed by author\n";
printf "%25s %8s %8s %9s\n",'author','added','removed','pct add';
foreach my $author (sort keys %{$stats{total}{by_author}}) {
    next if $author eq 'total';
    printf "%25s %8d %8d %8.0f%%\n",$author,@{$stats{total}{by_author}{$author}}{qw{added removed}}
        ,100*$stats{total}{by_author}{$author}{added}/$stats{total}{by_author}{total}{added};
};
print "\n";


print "Total lines in the final project by author\n";
printf "%25s %8s %9s\n",'author','final','percent';
foreach my $author (sort keys %{$stats{final}{by_author}}) {
    printf "%25s %8d %8.0f%%\n",$author,$stats{final}{by_author}{$author}
        ,100*$stats{final}{by_author}{$author}/$stats{final}{by_author}{total};
}

আমি এই ত্রুটিটি পাচ্ছি: x.pl লাইনে 71. শূন্য দ্বারা অবৈধ বিভাগ।
বিবেক ঝা

Line১ লাইনে শূন্য দ্বারা অবৈধ বিভাগকে সম্বোধন করেছিলেন Think মনে করুন যে কোনও সম্পাদনা না থাকলে এটি ঘটে তবে কিছুক্ষণ আগে আমি এটি লিখেছিলাম।
অ্যারোনএম

2

উইন্ডোজ ব্যবহারকারীদের জন্য আপনি নিম্নলিখিত ব্যাচের স্ক্রিপ্ট ব্যবহার করতে পারেন যা নির্দিষ্ট লেখকের জন্য যুক্ত / সরানো রেখাগুলি গণনা করে

@echo off

set added=0
set removed=0

for /f "tokens=1-3 delims= " %%A in ('git log --pretty^=tformat: --numstat --author^=%1') do call :Count %%A %%B %%C

@echo added=%added%
@echo removed=%removed%
goto :eof

:Count
  if NOT "%1" == "-" set /a added=%added% + %1
  if NOT "%2" == "-" set /a removed=%removed% + %2
goto :eof

https://gist.github.com/zVolodymyr/62e78a744d99d414d56646a5e8a1ff4f


2

এখানে একটি দুর্দান্ত রেপো যা আপনার জীবনকে সহজ করে তোলে

git-quick-stats

ম্যাক ইনস্টল করা আছে সঙ্গে ম্যাক

brew install git-quick-stats

চালান

git-quick-stats

তালিকাভুক্ত নম্বর টাইপ করে এন্টারটি চাপিয়ে এই তালিকা থেকে আপনি কোন বিকল্পটি চান তা চয়ন করুন।

 Generate:
    1) Contribution stats (by author)
    2) Contribution stats (by author) on a specific branch
    3) Git changelogs (last 10 days)
    4) Git changelogs by author
    5) My daily status
    6) Save git log output in JSON format

 List:
    7) Branch tree view (last 10)
    8) All branches (sorted by most recent commit)
    9) All contributors (sorted by name)
   10) Git commits per author
   11) Git commits per date
   12) Git commits per month
   13) Git commits per weekday
   14) Git commits per hour
   15) Git commits by author per hour

 Suggest:
   16) Code reviewers (based on git history)


1

এখানে এই স্ক্রিপ্ট এটি করবে। এটিকে authorship.sh, chmod + x এ রাখুন এবং আপনি সম্পূর্ণ প্রস্তুত।

#!/bin/sh
declare -A map
while read line; do
    if grep "^[a-zA-Z]" <<< "$line" > /dev/null; then
        current="$line"
        if [ -z "${map[$current]}" ]; then 
            map[$current]=0
        fi
    elif grep "^[0-9]" <<<"$line" >/dev/null; then
        for i in $(cut -f 1,2 <<< "$line"); do
            map[$current]=$((map[$current] + $i))
        done
    fi
done <<< "$(git log --numstat --pretty="%aN")"

for i in "${!map[@]}"; do
    echo -e "$i:${map[$i]}"
done | sort -nr -t ":" -k 2 | column -t -s ":"

1
না, এটি আপনি অন্য কোথাও পোস্ট করেছেন, এটি ম্যাকস এবং লিনাক্সগুলিতে ত্রুটি তৈরি করে, আপনি জানেন, কম্পিউটার গিটের ধরণটি তৈরি হয়েছিল!
পিজ্জাইওলা গর্জনজোলা

1

আপনার লগগুলি ফাইলটিতে সংরক্ষণ করে:

git log --author="<authorname>" --oneline --shortstat > logs.txt

পাইথন প্রেমীদের জন্য:

with open(r".\logs.txt", "r", encoding="utf8") as f:
    files = insertions = deletions = 0
    for line in f:
        if ' changed' in line:
            line = line.strip()
            spl = line.split(', ')
            if len(spl) > 0:
                files += int(spl[0].split(' ')[0])
            if len(spl) > 1:
                insertions += int(spl[1].split(' ')[0])
            if len(spl) > 2:
                deletions += int(spl[2].split(' ')[0])

    print(str(files).ljust(10) + ' files changed')
    print(str(insertions).ljust(10) + ' insertions')
    print(str(deletions).ljust(10) + ' deletions')

আপনার ফলাফলগুলি হবে:

225        files changed
6751       insertions
1379       deletions

0

আপনি গিট দোষ চান

কিছু, ভাল, পরিসংখ্যান মুদ্রণের জন্য একটি - শো-পরিসংখ্যান বিকল্প রয়েছে option


আমি চেষ্টা করেছিলাম blame, কিন্তু এটি ওপটির দরকার হবে বলে আমি ভেবেছিলাম এমন পরিসংখ্যান সত্যিই দেয় নি?
সিবি বেইলি

ধন্যবাদ, এটি আমাকে। মেলাম্যাপেও সহায়তা করেছিল!
গাভ

0

প্রশ্নটি কোনও নির্দিষ্ট লেখকের কাছে তথ্যের জন্য জিজ্ঞাসা করেছিল , তবে উত্তরগুলির অনেকগুলি সমাধান ছিল যা তাদের কোডের লাইনের ভিত্তিতে লেখকের তালিকাভুক্ত তালিকা পরিবর্তন করেছিল।

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

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

#!/bin/bash
git --git-dir="$1/.git" log > /dev/null 2> /dev/null
if [ $? -eq 128 ]
then
    echo "Not a git repository!"
    exit 128
else
    echo -e "Lines  | Name\nChanged|"
    git --work-tree="$1" --git-dir="$1/.git" ls-files -z |\
    xargs -0n1 git --work-tree="$1" --git-dir="$1/.git" blame -C -M  -w |\
    cut -d'(' -f2 |\
    cut -d2 -f1 |\
    sed -e "s/ \{1,\}$//" |\
    sort |\
    uniq -c |\
    sort -nr
fi

0

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

এনপিএম ইনস্টল -জি গিটিনস্পেক্টর

আরও বিশদ পেতে লিঙ্কগুলি

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 etc

0

আমি এই পার্ল স্ক্রিপ্ট লিখেছিলাম সেই কাজটি সম্পাদন করার জন্য।

#!/usr/bin/env perl

use strict;
use warnings;

# save the args to pass to the git log command
my $ARGS = join(' ', @ARGV);

#get the repo slug
my $NAME = _get_repo_slug();

#get list of authors
my @authors = _get_authors();
my ($projectFiles, $projectInsertions, $projectDeletions) = (0,0,0);
#for each author
foreach my $author (@authors) {
  my $command = qq{git log $ARGS --author="$author" --oneline --shortstat --no-merges};
  my ($files, $insertions, $deletions) = (0,0,0);
  my @lines = `$command`;
  foreach my $line (@lines) {
    if ($line =~ m/^\s(\d+)\s\w+\s\w+,\s(\d+)\s\w+\([\+|\-]\),\s(\d+)\s\w+\([\+|\-]\)$|^\s(\d+)\s\w+\s\w+,\s(\d+)\s\w+\(([\+|\-])\)$/) {
      my $lineFiles = $1 ? $1 : $4;
      my $lineInsertions = (defined $6 && $6 eq '+') ? $5 : (defined $2) ? $2 : 0;
      my $lineDeletions = (defined $6 && $6 eq '-') ? $5 : (defined $3) ? $3 : 0;
      $files += $lineFiles;
      $insertions += $lineInsertions;
      $deletions += $lineDeletions;
      $projectFiles += $lineFiles;
      $projectInsertions += $lineInsertions;
      $projectDeletions += $lineDeletions;
    }
  }
  if ($files || $insertions || $deletions) {
    printf(
      "%s,%s,%s,+%s,-%s,%s\n",
      $NAME,
      $author,
      $files,
      $insertions,
      $deletions,
      $insertions - $deletions
    );
  }
}

printf(
  "%s,%s,%s,+%s,-%s,%s\n",
  $NAME,
  'PROJECT_TOTAL',
  $projectFiles,
  $projectInsertions,
  $projectDeletions,
  $projectInsertions - $projectDeletions
);

exit 0;

#get the remote.origin.url joins that last two pieces (project and repo folder)
#and removes any .git from the results. 
sub _get_repo_slug {
  my $get_remote_url = "git config --get remote.origin.url";
  my $remote_url = `$get_remote_url`;
  chomp $remote_url;

  my @parts = split('/', $remote_url);

  my $slug = join('-', @parts[-2..-1]);
  $slug =~ s/\.git//;

  return $slug;
}

sub _get_authors {
  my $git_authors = 'git shortlog -s | cut -c8-';
  my @authors = `$git_authors`;
  chomp @authors;

  return @authors;
}

আমি এটা নামে git-line-changes-by-authorএবং পুরা /usr/local/bin। কারণ এটি আমার পথে সংরক্ষণ করা হয়েছে, তাই আমি git line-changes-by-author --before 2018-12-31 --after 2020-01-012019 বছরের প্রতিবেদনটি পেতে আদেশটি জারি করতে পারি । উদাহরণ হিসাবে। এবং যদি আমি নামের ভুল বানান করি তবে গিটটি সঠিক বানানের পরামর্শ দেবে।

আপনি আমার _get_repo_slugসাব- কে সামঞ্জস্য করতে চাইলে কেবলমাত্র remote.origin.urlআমার শেষ অংশটি যেমন অন্তর্ভুক্ত করা হয়েছে তেমন অন্তর্ভুক্ত করতে পারেন project/repoএবং আপনার নাও হতে পারে।

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