আমি কীভাবে গিট কমিট গণনা করব?


752

আমি আমার গিট সংগ্রহস্থলের কমিটের সংখ্যা পেতে চাই, কিছুটা এসভিএন সংশোধন সংখ্যাগুলির মতো।

লক্ষ্যটি হ'ল এটিকে অনন্য, বর্ধনশীল বিল্ড নম্বর হিসাবে ব্যবহার করা।

আমি বর্তমানে ইউনিক্স / সাইগউইন / এমএসএসজিট-তে এটি করি:

git log --pretty=format:'' | wc -l

তবে আমি মনে করি এটি কিছুটা হ্যাক।

এটি করার আরও ভাল উপায় আছে কি? আমার আসলে wcবা গিটের দরকার না পড়লে এটি দুর্দান্ত হবে , সুতরাং এটি একটি খালি উইন্ডোতে কাজ করতে পারে। কেবল একটি ফাইল বা ডিরেক্টরি কাঠামো পড়ুন ...


1
আপনি এখানে আকর্ষণীয় উত্তর পেতে পারেন: সংশোধন নম্বর জন্য গিট সমতুল্য কি?
সেবাস্তিয়ান ভারেটে


14
@ জবার্গার: আমি মনে করি আপনার মন্তব্যটি উত্তরে রূপান্তরিত হওয়া উচিত।
ইউটিপিংগো

@utapyngo: 13 টি উত্তর দেওয়া, আমি জানতাম এটি সমাধিস্থ করা হবে। আমি এখানে এটি পোস্ট করেছি ।
জেক বার্গার

@ জবার্গার, এই উত্তরটি git1.7.0 এর জন্য কাজ করে না।
ভোরাক

উত্তর:


1159

একটি সংস্করণ (জন্য গণনা কমিট পেতে HEAD, master, একটি হ্যাশ কমিট):

git rev-list --count <revision>

সমস্ত শাখায় প্রতিশ্রুতি গণনা পেতে:

git rev-list --all --count

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


27
git shortlog | grep -E '^[ ]+\w+' | wc -lআপনি যদি মোট নম্বর পেতে চান এবং git shortlog | grep -E '^[^ ]'আপনি যদি প্রতিটি অবদানকারীর জন্য কমিট নম্বর পেতে চান।
স্কলে 18

2
নির্দেশ করার জন্য ধন্যবাদ wc -l। মিনিমালিজম এফটিডাব্লু। আমি আমার উত্তরে এটি অন্তর্ভুক্ত করেছি।
বেনজামিন আটকিন 21

17
এই সমাধানটি হ্যাকি ( git log --pretty=format:'' | wc -lমূল প্রশ্নের মধ্যে দেওয়া পদ্ধতির অনুরূপ ) এবং ভুল: আপনি ম্যাচটি উল্টিয়ে এটি দেখতে পারেন ( git shortlog | grep -Ev '^[ ]+\w+') এবং কোনও বার্তা না দিয়ে প্রতিশ্রুতিবদ্ধ (যেমন, "<কোন>") গণনা করা হয় না তা দেখে আপনি এটি দেখতে পারেন । ব্যবহার git rev-list HEAD --countকরা আরও সংক্ষিপ্ত এবং আরও সঠিক।
ctrueden

17
@ বেনআটকিন: আমার ক্ষমা চাইছি; আপত্তিজনক, নিছক সত্যবাদী হওয়া আমার উদ্দেশ্য ছিল না। প্রতিক্রিয়া তারিখ সম্পর্কে পয়েন্ট নেওয়া। সেই সময়ে, আপনার সমাধানটি সম্ভবত খুব ভাল পাওয়া যায়। তবে আমি আমার বক্তব্যের পাশে দাঁড়িয়েছি এটি git rev-list HEAD --countএখন আরও ভাল সমাধান।
সিট্রুডেন

3
পাশাপাশি একটি উত্তর যুক্ত করেছে এবং পুরানো সংস্করণগুলির সাথেও কাজ করে:git log --oneline | wc -l
জিমি কেন

155

git shortlog এক উপায়।


5
Ty। একটি পরিসরে গণনা করার সময় এটি আমার পক্ষে কাজ করেছিল; গিট শর্টলগ sha1..sha2
আরজেফালকনার

1
হ্যাঁ, গিট শর্টলজের প্রথম লাইনে এতে কমিটের সংখ্যা রয়েছে। সমস্যা সমাধান.
রবার্ট ম্যাসাইওলি

5
কমিটের সংখ্যা প্রতিশ্রুতিবদ্ধদের দ্বারা গোষ্ঠীযুক্ত, এত ভাল নয়। গিট শর্টলগে লাইনগুলি গণনা করতে পারে, তবে এটি কোনও কারণে টার্মিনাল ছাড়াই (পেজার?) এসএসএসে কাজ করে না। প্রশ্নকের মূল সমাধানটি সবচেয়ে ভাল! গিট লগ - ব্যাখ্যা = ফর্ম্যাট: '' | wc -l
স্যাম ওয়াটকিন্স

4
তবে আমি git rev-list HEAD --countওপিতে দেওয়া মূল পদ্ধতির চেয়ে পরামর্শ দেব rather আমার পরীক্ষায়, git log --pretty=format:'' | wc -lএক এক দ্বারা বন্ধ আছে।
ctrueden

3
@ctrueden git log --oneline | wc -lএকটি দ্বারা বন্ধ নেই (ওএস এক্স 10.8.5)।
অ্যান্ডি স্টুয়ার্ট

111

git rev-list HEAD --count

গিট পুনরায় তালিকা

git rev-list <commit>: প্রদত্ত প্রতিশ্রুতি (এই ক্ষেত্রে, হেড ) থেকে পিতামাতার লিঙ্কগুলি অনুসরণ করে যেগুলি অ্যাক্সেসযোগ্য তার তালিকাবদ্ধ করুন ।

--count : কতগুলি কমিট তালিকাভুক্ত হবে তা উল্লেখ করে একটি সংখ্যা মুদ্রণ করুন এবং অন্যান্য সমস্ত আউটপুট দমন করে।


100

এই কমান্ডটি প্রতিশ্রুতিবদ্ধদের দ্বারা গোষ্ঠীবদ্ধ কমিটগুলির গণনা প্রদান করে:

git shortlog -s

আউটপুট:

14 John lennon
9  Janis Joplin

আপনি জানতে চাইতে পারেন যে -sযুক্তিটি সংকোচনের রূপ --summary


11
git shortlogনিজেই মোট কমিটের সংখ্যার মূল প্রশ্নটি সম্বোধন করে না (লেখকের দ্বারা গোষ্ঠীভুক্ত নয়)। git rev-list HEAD --countপরিবর্তে ব্যবহার করুন।
ctrueden

5
অসাধারণ! আপনি এটির তা বাছাই করতে পারেন | sort -nখুব
মোহসেন

54

যদি আপনি কমিটের জন্য একটি অনন্য এবং এখনও বেশ পঠনযোগ্য শনাক্তকারীকে সন্ধান করেন, গিট বিবরণ আপনার জন্য কেবল জিনিস।


2
এটি কাজ করতে পারে এবং কাস্টম-মেড অ্যালগোয়ের চেয়ে ব্যবহার করা আরও সহজ। +1
ভোনসি

2
আমি গিট বর্ণনা জানি না। ট্যাগ নাম এবং sha1 এর মধ্যে এই সামান্য সংখ্যাটি আমি যা খুঁজছিলাম ঠিক সেটাই। ধন্যবাদ.
স্প্লো

2
জিআইটি-সংস্করণ-জেন স্ক্রিপ্ট এবং এটি কীভাবে গিট সংগ্রহস্থলে ব্যবহৃত হয়, এবং লিনাক্স কার্নেল উত্সগুলিতে অনুরূপ স্ক্রিপ্ট (এবং সেগুলি মেকফাইলে কীভাবে ব্যবহার করা হয়) দেখুন।
জাকুব নারেবস্কি

এটি অনন্য, তবে ইনক্রিমেন্টাল আইডি দেয় না। আমার জন্য কাজ করে না। তবে বেন আতকিনের উত্তর প্রতিশ্রুতিবদ্ধ গণনা দেয়, যা বাস্তবে বর্ধিত হওয়া উচিত। হারুন ডিগুল্লার উত্তর আরও নিশ্চিত, তবে আরও কাজ করা দরকার।
জেএম

2
হ্যাঁ, যে কারণ ধারণা একটি এর ক্রমবর্ধমান আইডি বিতরণ সংস্করণ কন্ট্রোল সিস্টেম যে কোনো অর্থে দেখা যায় না।
বোম্বে

34

গিতে "রিভিশন নম্বর" সম্পর্কে ভাবতে ভাবতে আপনি প্রথম ব্যক্তি নন , তবে ' wc' বেশ বিপজ্জনক, যেহেতু প্রতিশ্রুতি মুছে ফেলা বা মুছতে পারে এবং ইতিহাস পুনরায় দেখা যায়।

"সংশোধন নম্বর" সাবভার্সনের জন্য বিশেষত গুরুত্বপূর্ণ ছিল যেহেতু মার্জ হওয়ার ক্ষেত্রে এটির প্রয়োজন ছিল (এসভিএন 1.5 এবং 1.6 সেই ফ্রন্টে উন্নত হয়েছে)।

আপনি একটি প্রি-কমিট হুক দিয়ে শেষ করতে পারেন যা মন্তব্যে একটি সংশোধন নম্বর অন্তর্ভুক্ত করবে, একটি অ্যালগরিদম সহ সঠিক সংখ্যা নির্ধারণের জন্য কোনও শাখার সমস্ত ইতিহাস অনুসন্ধানে জড়িত নয়

বাজার আসলে এই ধরণের অ্যালগোরিদম নিয়ে এসেছিল এবংআপনি যা করতে চান এটির জন্য এটি সূচনার পয়েন্ট হতে পারে।

( বোম্বের উত্তরটি উল্লেখ করে যে, গীতের প্রকৃতপক্ষে তার নিজস্ব একটি অ্যালগরিদম রয়েছে, সর্বশেষ ট্যাগের উপর ভিত্তি করে কমিটের সংখ্যা এবং একটি SHA-1 কী এর কিছুটা)) আপনার উত্তরটি যদি আপনার হয়ে কাজ করে তবে আপনার (এবং উত্তেজনা) দেখে নেওয়া উচিত।


হারুনের ধারণাটি বর্ণনা করার জন্য , আপনি নিজের অ্যাপ্লিকেশনটি দিয়ে বিতরণ করছেন এমন একটি অ্যাপ্লিকেশনটির "তথ্য" ফাইলটিতে গিট কমিট হ্যাশ যুক্ত করতে পারেন ।

এইভাবে, সম্পর্কে বাক্সটি দেখতে পাবেন:

বক্স সম্পর্কে

আবেদনকারী নম্বরটি অঙ্গীকারের অংশ, তবে প্যাকিং প্রক্রিয়া চলাকালীন 'অ্যাপ্লিকেশনটির "তথ্য" ফাইলটি উত্পন্ন হয়, কার্যকরভাবে একটি আবেদনকারী বিল্ড নম্বরটিকে প্রযুক্তিগত সংশোধন আইডির সাথে যুক্ত করে


2
আমি আমার স্ক্রিপ্টটি এক্সকোড 3 এর সাথে কাজ করার জন্য আপডেট করেছি g আপনি gist.github.com/208825 থেকে একটি আপ টু ডেট সংস্করণ তুলতে পারেন
আবাইজার্ন

34

আপনি কেবল ব্যবহার করতে পারেন:

git shortlog -s -n

ফলাফল :

 827  user one
    15  user two
     2  Gest 

22

একটি সহজ উপায়:

 git log --oneline | wc -l

oneline নিশ্চিত করে


1
'ডাব্লুসি' অভ্যন্তরীণ বা বাহ্যিক কমান্ড, অপারেবল প্রোগ্রাম বা ব্যাচ ফাইল হিসাবে স্বীকৃত নয়।
ব্যবহারকারী 815693

আচ্ছা আপনি কোন সিস্টেমটি ব্যবহার করছেন? এটি কি ইউনিক্স? /
জিমি কেন

1
আপনার হাজার হাজার কমিট থাকলে এটিও দ্রুত বলে মনে হয়। অন্যান্য সমস্ত কমান্ড খুব বেশি সময় নেয়।
ড্যানি কলোম্বে

21

এটিকে ভেরিয়েবলে পেতে, সবচেয়ে সহজ উপায় হ'ল:

export GIT_REV_COUNT=`git rev-list --all --count`

5
প্রকৃতপক্ষে, git rev-listব্যবহারের সঠিক সরঞ্জাম, git logঅন্যের মত নয় ।
নায়ুকি

1
হেডে পৌঁছাতে বংশে কমিটের সংখ্যা গণনা করতে: গিট রেভিস্ট-তালিকা - প্রথম-পিতামাতার | wc-l
200_success

আপনি প্রয়োজন নেই wc -lশুধু ব্যবহার --countসুইচ: git rev-list --all --count
slm

ধন্যবাদ @ এসএলএম, আমি উত্তরটি আপডেট করেছি। যদিও, আমি সন্দেহ করি যে আসল উত্তরটি --countস্যুইচ থেকে নিজের চেয়ে পুরানো ।
জন গিয়েজেন

@ জনগিয়েটজেন - ওহ হ্যাঁ আমি বুঝতে পেরেছি যে 8-), সাহায্যের জন্য কেবল এই বিশদটি যোগ করছিল।
slm

17

কমিটের বিবরণ পাওয়ার জন্য গিট শর্টলগ হ'ল একটি উপায়:

git shortlog -s -n

এটি লেখকের নাম অনুসারে কমিটের সংখ্যা দেবে। -S বিকল্পটি লেখক যে প্রতিশ্রুতিবদ্ধ সেটির জন্য সমস্ত প্রতিশ্রুতিবদ্ধ বার্তা সরিয়ে দেয়। আপনি যদি প্রতিশ্রুতিবদ্ধ বার্তাগুলিও দেখতে চান তবে একই বিকল্পটি সরান। পুরো তালিকাটি বাছাই করার জন্য -n বিকল্পটি ব্যবহৃত হয়। আশাকরি এটা সাহায্য করবে.


2
git shortlogনিজেই মোট কমিটের সংখ্যার মূল প্রশ্নটি সম্বোধন করে না (লেখকের দ্বারা গোষ্ঠীভুক্ত নয়)। git rev-list HEAD --countপরিবর্তে ব্যবহার করুন।
ctrueden

8

গিট রেভ-পার্স - শর্ট হেড


1
একটি হ্যাশ উত্পাদন করে, যেখানে একটি নম্বর অনুরোধ করা হয়েছিল।
জেসি গ্লিক

7

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


4

আপনি যদি কেবলমাত্র একটি শাখা যেমন মাস্টার ব্যবহার করেন তবে আমার মনে হয় এটি দুর্দান্ত কাজ করবে:

git rev-list --full-history --all | wc -l

এটি কেবল একটি সংখ্যা আউটপুট করবে will আপনি এটির মতো কিছু উপাধি দিতে পারেন

git revno

জিনিসগুলিকে সত্যিই সুবিধাজনক করে তুলতে। এটি করতে, আপনার .git/configফাইল সম্পাদনা করুন এবং এতে যুক্ত করুন:

[alias]
    revno = "!git rev-list --full-history --all | wc -l"

এটি উইন্ডোজে কাজ করবে না। আমি সেই ওএসের জন্য "ডাব্লুসি" এর সমতুল্য জানি না, তবে আপনার জন্য গণনা করার জন্য পাইথন স্ক্রিপ্ট লেখা একটি মাল্টি প্ল্যাটফর্ম সমাধান হতে পারে।

সম্পাদনা : দুটি কমিটের মধ্যে গণনা পান:


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

git rev-list --count [older-commit]..[newer-commit]

3

বিল্ড করার সময় একটি সংখ্যা তৈরি করুন এবং এটি একটি ফাইলে লিখুন। আপনি যখনই একটি রিলিজ করবেন তখনই "বিল্ড 147" মন্তব্যটি (বা বর্তমানে বিল্ড নম্বরটি যাই হোক না কেন) দিয়ে সেই ফাইলটি প্রতিশ্রুতিবদ্ধ করুন। স্বাভাবিক বিকাশের সময় ফাইলটি প্রতিশ্রুতিবদ্ধ করবেন না। এইভাবে, আপনি গিটে বিল্ড নম্বর এবং সংস্করণগুলির মধ্যে সহজেই ম্যাপ করতে পারেন।


দু'টি বিতরণকারী বিকাশকারী যদি তাদের বিল্ড সংখ্যা পর্যায়ক্রমে সংঘর্ষ / ছেদ করে না? যদি তারা উভয়ই ভাগ করা রেপোগুলির একই রেভগুলির মধ্যে একটি বিল্ড তৈরি করে, বা সম্ভবত সংঘর্ষ তখনই ঘটতে পারে যদি হয় ভাগ করে নেওয়া রেপোতে প্রতিশ্রুতিবদ্ধ না হয়। নিশ্চিত না.
hobs

অবশ্যই তবে দ্বন্দ্ব আপনাকে কী করতে হবে তা বলে: কেবলমাত্র অন্য লোকের সাথে কথা বলুন বা সর্বদা উচ্চতর সংখ্যা ব্যবহার করুন। মনে রাখবেন: একটি সংখ্যা একটি ভাঙ্গা বিল্ড প্রক্রিয়াটিকে যাদুকরীভাবে নিরাময় করতে পারে না। এটি কেবল একটি অনুস্মারক বা ইঙ্গিত যা আপনাকে কিছু পরীক্ষা করতে হবে।
অ্যারন ডিজুল্লা

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

3

আমাদের সংস্থায়, আমরা এসভিএন থেকে গিতে চলে এসেছি। রিভিশন সংখ্যার অভাব একটি বড় সমস্যা ছিল!

করুন git svn cloneএবং তারপরে তার এসভিএন সংশোধন নম্বর দ্বারা সর্বশেষ এসভিএন প্রতিশ্রুতি ট্যাগ করুন:

export hr=`git svn find-rev HEAD`
git tag "$hr" -f HEAD

তারপরে আপনি সাহায্যের মাধ্যমে সংশোধন নম্বর পেতে পারেন

git describe --tags --long

এই আদেশটি এরকম কিছু দেয়:

7603-3-g7f4610d

মানে: সর্বশেষ ট্যাগটি 7603 - এটি এসভিএন সংশোধন। 3 - এটি থেকে কমিটের গণনা। আমাদের সেগুলি যুক্ত করা দরকার।

সুতরাং, পুনর্বিবেচনা নম্বরটি এই স্ক্রিপ্ট দ্বারা গণনা করা যেতে পারে:

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)

1

আমি যেটি ব্যবহার করতাম তা হ'ল:

git log | grep "^commit" | wc -l

সহজ তবে এটি কাজ করেছিল।


4
গণনা বিরতিতে "কমিট" দিয়ে ভিক্ষা করে একটি প্রতিশ্রুতিবদ্ধ বার্তা লাইন লাগে। উদাহরণস্বরূপ: "সংশোধন করা ভুল এবং ভাঙা পরীক্ষাগুলি যা আমি ঘটনাক্রমে শেষ com n কমিটে ধাক্কা দিয়েছিলাম"
পাউয়ে পোলেভিজ

1

বাশ সিনট্যাক্স ব্যবহার করে,

$(git rev-list --count HEAD)

নিখুঁত রৈখিক ইতিহাসের জন্য দুর্দান্ত দেখাচ্ছে looks আপনি যদি কখনও কখনও শাখা থেকে "সংখ্যা" পেতে চান (ভিত্তিক অফ master), বিবেচনা করুন:

$(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD)

যখন একটি চেকআউট থেকে চালানো হয় master, আপনি সহজ 1234.0বা পছন্দ মতো পান। যখন একটি শাখার চেকআউট থেকে চালানো হবে আপনি এমন কিছু পাবেন 1234.13, যদি সেই শাখায় 13 টি কমিট করা থাকে। আপনি প্রদত্ত masterসংশোধন বন্ধ করে সর্বাধিক একটি শাখায় ভিত্তি করে নিচ্ছেন তবে এটি কেবল ইনসফার কার্যকর useful

--first-parent কেবলমাত্র অন্যান্য শাখা মার্জ করার ফলে উদ্ভূত কিছু প্রতিশ্রুতি দমন করতে মাইক্রো সংখ্যায় যুক্ত করা যেতে পারে, যদিও এটি সম্ভবত অপ্রয়োজনীয়।


1

আপনি চেষ্টা করতে পারেন

git log --oneline | wc -l

অথবা ভাণ্ডারগুলিতে অবদানকারী লোকদের দ্বারা সম্পাদিত সমস্ত কমিটের তালিকাবদ্ধ করতে

git shortlog -s

1

git config --global alias.count 'rev-list --all --count'

আপনি যদি এটি আপনার কনফিগারেশনে যুক্ত করেন তবে আপনি কেবলমাত্র আদেশটি উল্লেখ করতে পারেন;

git count


0

গিট শর্টলগ ঠিক এর মতো ব্যবহার করুন

git shortlog -sn

অথবা একটি উপাধি তৈরি করুন (জেডএসএইচ ভিত্তিক টার্মিনালের জন্য)

# show contributors by commits alias gcall="git shortlog -sn"


0

কিভাবে একটি তৈরি সম্পর্কে alias?

alias gc="git rev-list --all --count"      #Or whatever name you wish
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.