প্রাথমিক প্রতিশ্রুতি রেফারেন্স কিভাবে?


131

আমি একটি স্ক্রিপ্ট পেয়েছি যা একটি সংগ্রহস্থলের প্রাথমিক প্রতিশ্রুতি রেফারেন্স করা প্রয়োজন। গিটের বিশেষ রেফারেন্স রয়েছে HEADতবে এর সাথে সম্পর্কিত নেই TAIL। এতে আমার git help rev-parseসাহায্য করার মতো কিছু খুঁজে পাচ্ছি না ।

আমি যা করতে চাই তা এখানে:

git show TAIL

আমার কাছে একটি বিকল্প এখানে রয়েছে:

git show `git log --reverse | if read a commit ; then echo $commit ; fi`

এটি বেশ হ্যাকি এবং গিট লগ পরিবর্তন না করে আউটপুট উপর নির্ভর করে।

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

উত্তর:


151

স্ক্রিপ্টিংয়ের জন্য গিট-লগ ব্যবহার করবেন না: হয় ব্যবহার করুন git-rev-listবা git-logনির্দিষ্ট কাস্টম বিন্যাস ( --format=*<sth>*বিকল্প) সহ।

সেখানে বিদ্যমান পারেন: আপনার প্রশ্নের সঙ্গে অতিরিক্ত সমস্যা একাধিক (মাতাপিতৃহীন কমিট) একটি সংগ্রহস্থলের মধ্যে (এমনকি যদি আমরা এই ধরনের 'HTML', 'মানুষ' ও 'করণীয়' থেকে git.git যেমন বিচ্ছিন্ন শাখা ছাড় যেমন, লেজ রুট কমিট সংগ্রহস্থলের)। এটি সাধারণত একটিতে পৃথক প্রকল্পে যোগদানের, বা পৃথকভাবে বিকশিত সাবপ্রজেক্টের সাবট্রি মার্জ ব্যবহারের ফলাফল।

উদাহরণস্বরূপ গিট সংগ্রহস্থলটিতে 6 টি মূল কমিট রয়েছে: গিট-গুই, গিটক (সাবট্রি-মার্জ), গিটউইব (একত্রীভূত হবে না, আলাদাভাবে বিকশিত হবে না), গিট মেল সরঞ্জামগুলি (প্রকল্পের ইতিহাসের প্রথম দিকে মার্জড) এবং পি 4-ফাস্ট-এক্সপোর্ট ( সম্ভবত দুর্ঘটনাক্রমে)। এটি 'এইচটিএমএল এবং' ম্যান 'শাখার শিকড়গুলি গণনা করছে না, "সুবিধা" শাখায় প্রাক-উত্পন্ন ডকুমেন্টেশন এবং টোডো তালিকা এবং স্ক্রিপ্ট সহ' টুডো 'শাখা রয়েছে।


আপনার যদি গিট ১.7.৪.২ বা তার থেকেও নতুন হয় তবে আপনি --max-parentsবিকল্পটি ব্যবহার করতে পারেন :

$ git rev-list --max-parents=0 HEAD

অন্যথায়, আপনি বর্তমান শাখা থেকে অ্যাক্সেসযোগ্য সমস্ত প্যারেন্টলেস (মূল) এর তালিকা পেতে পারেন:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

আমার জন্য, git rev-list HEAD | tail -n 1এবং git rev-list --max-parents=0 HEADআমার জন্য একই হ্যাশ মানটি ফিরিয়ে দিচ্ছে না। যেটি ব্যবহার করছে --max-parents=0সে আসলে প্রাথমিক প্রতিশ্রুতি পাচ্ছে। আমি ভেবেছিলাম যে আমি এটি উল্লেখ করব যে উত্তরোত্তর আরও নির্ভরযোগ্য বলে মনে হচ্ছে।
jbranchaud

1
@ ট্রাইব্র্যাঞ্চ যদি আপনি বিজোড় টাইমস্ট্যাম্পগুলির সাথে চুক্তি করেন তবে এটি ঘটতে পারে। যুক্ত --topo-orderকরা rev-listউচিত এটি ঠিক করা উচিত, যদিও আমি মনে করি --max=parents=0উত্তরটি সবচেয়ে ভাল।
jthill

35

git rev-list HEAD | tail -n 1 একটি আরও স্থিতিশীল বিকল্প।


14
এটি একটি পুচ্ছ প্রতিশ্রুতি ফিরে আসবে ; একাধিক শিকড় (পিতামহীন) প্রতিশ্রুতি থাকতে পারে
জাকুব নরবস্কি

এই উত্তরটি নিখুঁতভাবে কাজ করেছে এবং কেবল একটি প্রতিশ্রুতি git rev-list --max-parents=0 HEADফিরিয়েছে যেখানে 3 টি কমিট প্রত্যাবর্তিত হয়েছে।
প্রোটো ইভানজিলিয়ন 20'18

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