হালনাগাদ
git ls-tree -r -z --name-only HEAD -- */*.c | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep "^author "|sort|uniq -c|sort -nr
আমি পথে কিছু জিনিস আপডেট করেছি।
সুবিধার জন্য, আপনি এটিকে নিজের কমান্ডের মধ্যেও রাখতে পারেন:
#!/bin/bash
# save as i.e.: git-authors and set the executable flag
git ls-tree -r -z --name-only HEAD -- $1 | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep "^author "|sort|uniq -c|sort -nr
এটি আপনার পথে কোথাও সংরক্ষণ করুন বা আপনার পথটি সংশোধন করুন এবং এটি পছন্দ করুন
git authors '*/*.c' # look for all files recursively ending in .c
git authors '*/*.[ch]' # look for all files recursively ending in .c or .h
git authors 'Makefile' # just count lines of authors in the Makefile
আসল উত্তর
স্বীকৃত উত্তরটি কাজটি করার সময় এটি খুব ধীর।
$ git ls-tree --name-only -z -r HEAD|egrep -z -Z -E '\.(cc|h|cpp|hpp|c|txt)$' \
|xargs -0 -n1 git blame --line-porcelain|grep "^author "|sort|uniq -c|sort -nr
প্রায় তাত্ক্ষণিক।
বর্তমানে ট্র্যাক করা ফাইলগুলির একটি তালিকা পেতে আপনি ব্যবহার করতে পারেন
git ls-tree --name-only -r HEAD
এই সমাধানটি fileফাইল টাইপ নির্ধারণের জন্য কল করা এড়ায় এবং পারফরম্যান্সের কারণে পছন্দসই এক্সটেনশনের সাথে মিলে গ্রেপ ব্যবহার করে। যদি সমস্ত ফাইল অন্তর্ভুক্ত করা উচিত, কেবল এটিকে লাইন থেকে সরান।
grep -E '\.(cc|h|cpp|hpp|c)$' # for C/C++ files
grep -E '\.py$' # for Python files
যদি ফাইলগুলিতে স্পেস থাকতে পারে তবে শেলগুলির জন্য খারাপ যা আপনি ব্যবহার করতে পারেন:
git ls-tree -z --name-only -r HEAD | egrep -Z -z '\.py'|xargs -0 ... # passes newlines as '\0'
ফাইলগুলির একটি তালিকা দিন (পাইপের মাধ্যমে) একটি কমান্ড কল করতে এবং যুক্তি বিতরণ করতে এক্সার্গস ব্যবহার করতে পারে। যে কমান্ড একাধিক ফাইল অনুমতি obmit প্রক্রিয়া হওয়ার -n1। এই ক্ষেত্রে আমরা কল করি git blame --line-porcelainএবং প্রতিটি কলের জন্য আমরা ঠিক 1 টি যুক্তি ব্যবহার করি।
xargs -n1 git blame --line-porcelain
এরপরে আমরা "লেখক" এর উপস্থিতিগুলির জন্য আউটপুট ফিল্টার করি তালিকাটি সাজান এবং নকল লাইনগুলি গণনা করে:
grep "^author "|sort|uniq -c|sort -nr
বিঃদ্রঃ
অন্যান্য উত্তরগুলি আসলে লাইনগুলি ফিল্টার করে যেগুলিতে কেবল শ্বেতস্থান থাকে।
grep -Pzo "author [^\n]*\n([^\n]*\n){10}[\w]*[^\w]"|grep "author "
উপরের কমান্ডটি কমপক্ষে একটি অ-হোয়াইটস্পেস অক্ষরযুক্ত লাইনের লেখককে মুদ্রণ করবে। আপনি \w*[^\w#]ম্যাচটিও ব্যবহার করতে পারেন যা লাইনগুলিও বাদ দেবে যেখানে প্রথম অ-সাদা অংশের অক্ষরটি নয় #(অনেকগুলি স্ক্রিপ্টিং ভাষায় মন্তব্য করুন)।