প্রথম ভাল প্রতিশ্রুতি পেতে আমি কীভাবে গিট বাইসেক্ট ব্যবহার করতে পারি?


94

আমি নিম্নলিখিত সমস্যা আছে:

  • সংস্করণ masterসূক্ষ্ম কাজ করে
  • সর্বশেষ ট্যাগটির সংস্করণে master(বলুন last) এর আগে একটি বাগ রয়েছে
  • কোনও নির্দিষ্ট সহযোগী ব্যক্তিকে lastসেই নির্দিষ্ট বাগের জন্য তার পুনর্বিবেচনার জন্য একটি প্যাচ প্রয়োজন

ঠিক আছে. আসুন আমাদের বন্ধুটিকে git bisectসংশোধনটির জন্য জিজ্ঞাসা করুন যা বাগটি স্থির করে:

git bisect start
git bisect bad last
git bisect good master

কিন্তু এটি কাজ করে না:

কিছু ভাল রেভস খারাপ রেভের পূর্বপুরুষ নয়।
এই ক্ষেত্রে গিট বিসেক্ট সঠিকভাবে কাজ করতে পারে না।
আপনি ভাল এবং খারাপ revs ভুল হতে পারে?

এটি কাটিয়ে উঠতে কোন ইঙ্গিত? আমি ডক্সে কিছু মিস করেছি?


4
আমি git bisect run ...দ্বিখণ্ডিত স্বয়ংক্রিয়ভাবে চালাচ্ছি । সুতরাং আমার কাছে কেবল শব্দগুলির অদলবদল করার কোনও সুযোগ নেই goodএবং bad(এটি খুব স্পষ্ট ছিল)। runপ্রথম ভাল সংশোধনটি কীভাবে ব্যবহার করবেন?
ড্যানিয়েল বোহ্মার

@ ড্যানিয়েলবিহ্মার: আপনার স্ক্রিপ্টটি চলমান অবস্থায় আপনাকে শর্তগুলি অদলবদল করতে হবে , তাই না?
22:36

দ্বারা চালিত স্ক্রিপ্টটি স্ট্রিং হিসাবে নয়, প্রস্থান কোড হিসাবে ভাল বা খারাপgit bisect run প্রত্যাবর্তন করে । আমার উত্তরটি দেখুন আমি স্রেফ নীচে পোস্ট করেছি।
ড্যানিয়েল বোহ্মার

@ ড্যানিয়েলহ্মার: ভাল, সেক্ষেত্রে আপনাকে রিটার্ন কোডটি উল্টাতে হবে, তাই না?
eckes

সঠিক, আমার উত্তরে এটিই বর্ণনা করা হয়েছে।
ড্যানিয়েল বোহমার

উত্তর:


100

গিট ২.7 হিসাবে, আপনি আর্গুমেন্টগুলি --term-old এবং --term-new ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, আপনি এইভাবে সমস্যা সমাধানের প্রতিশ্রুতি চিহ্নিত করতে পারেন:

git bisect start --term-new=fixed --term-old=unfixed
git bisect fixed master
git bisect unfixed $some-old-sha1

আপনি পরীক্ষা হিসাবে, বলুন git bisect fixedবা git bisect unfixedযথাযথ হিসাবে।

পুরানো উত্তর, 2.7 এর আগে গিট সংস্করণগুলির জন্য

নিজেকে অস্থায়ীভাবে প্রশিক্ষণের পরিবর্তে খারাপের অর্থ ভাল এবং ভাল মানে খারাপ বলে ভাবার জন্য প্রশিক্ষণ দেওয়ার পরিবর্তে কিছু উপকরণ তৈরি করবেন না কেন?

ইন ~/.gitconfigনিম্নলিখিত যোগ করুন:

[alias]
        bisect-fixed = bisect bad
        bisect-unfixed = bisect good

আপনি এইভাবে সমস্যা-সমাধানের প্রতিশ্রুতি সনাক্তকরণ শুরু করতে পারেন:

$ git bisect start
$ git bisect-fixed master
$ git bisect-unfixed $some-old-sha1

আপনি পরীক্ষা হিসাবে, বলুন git bisect-fixedবা git bisect-unfixedযথাযথ হিসাবে।


4
সরাইয়া হিসাবে, গিট আপনাকে সাব-কমান্ডের উপকরণ তৈরি করতে দেয় না। অতএব ড্যাশগুলি। যদি এটি আসলে সম্ভব হয় (বা তৈরি করা হয়) তবে আশা করি কেউ উত্তরটি আপডেট করবেন।
মাইকেল উলফ

4
এমনকি আপনি যদি এলিয়াস ব্যবহার করেন তবে গিট থেকে আউটপুট আসবে না, তাই এটি এখনও ফু-র প্রতিবেদন করবে is the first bad commit, সুতরাং মনে হয় অস্থায়ী প্রশিক্ষণটি এখনও প্রয়োজনীয়, না?
থমাসডাব্লু

4
ন্যায্য বিন্দু. (আপনার মন্তব্যে উজ্জীবিত।) যদিও এত আশাবাদী এটি মোকাবেলায় কমপক্ষে কিছুটা কম অতিরিক্ত জ্ঞানীয় বোঝা, এবং প্রোগ্রামার হিসাবে আমাদের ইতিমধ্যে প্রচুর পরিমাণ রয়েছে।
মাইকেল উলফ

4
আমি আগে 'এবং' পরে 'এলিয়াস ব্যবহার করার পরামর্শ দিই। "বিগটি দেখলে আমার" ভাল "লেখা উচিত; পরিবর্তে আপনার কেবলমাত্র "সম্ভবত আরও ছোট" ওভারহেড মনে রাখা দরকার যে আপনি কোনও বাগের উপস্থিতি / অন্তর্ধানের সন্ধান করছেন (যেমন আপনি কী ধরণের পরিবর্তন খুঁজছেন তা মনে করছেন - "কিসের আগে?")।
জোনাস কুলকার

4
@ জোনাসক্লেকার, এটি দুর্দান্ত ধারণা। আমি উত্তরে প্রস্তাব alias লেখা ব্যবহৃত পাশাপাশি, bisect-after = bisect badএবং bisect-before = bisect good, আপনার সুপারিশ প্রতি। এখন আমি উভয় উপকরণের সেট ব্যবহার করতে পারি। আমরা ব্যবহার করব যা কয়েকটি ব্যবহারের পরে আমি বেশি পছন্দ করি।
গ্যাব্রিয়েল স্ট্যাপলস

47

আমি কেবল "ঠকাই" গিট এবং ভাল <=> খারাপের স্বাপের অর্থ করব।

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

ভাল এবং খারাপ ভাল বিষয়গত ধারণা যাইহোক, ঠিক আছে? :)

git bisect start
git bisect good last
git bisect bad master

4
ঠিক আছে, আপনি যদি এটির বিষয়ে চিন্তা করেন তবে ভাল বা খারাপ কোনটি সাধারণ অর্থ নেই (সম্ভবত ধর্মেও নয়) এটি কেবল আপনার উদ্দেশ্যগুলির উপর নির্ভর করে। এইভাবে এটি আসলে প্রতারণা নয় - তবে গিটস সিন (ধর্মীয় বিষয় অবলম্বন করার জন্য: ডি হ'ল আরও নিরপেক্ষ "লক্ষ্য" / "উত্স" এর চেয়ে এই জাতীয় বিতর্কিত শব্দটি বেছে নেওয়া .. তবে হ্যাঁ, দর্শন মন হতে পারে- বগলিং ;-)
ইনারিজ

আমি অবশ্যই শুনেছি যে বাগগুলি "ভাল" হতে পারে।
মার্চএইচ

4
এই প্রশ্নটি পাওয়ার আগে আমি এটিই করেছি। আমি আর এটি করতে যাচ্ছি না। মনে রাখবেন, পুরো দ্বিপশুটি উদ্বিগ্ন হওয়ার আগে এটি কেবল একটি ভুল উত্তর নেয়। আপনার মনকে মোচড় দেবেন না।
প্রোসকি

21

আপনি ব্যবহার করেন, তাহলে git bisect runআমি পার্ল এর সঙ্গে কাজ করা হয়েছে proveকমান্ড (যা স্বয়ংক্রিয় পরীক্ষার রান) আপনি শুধু swap 'র কোন সুযোগ আছে goodএবং bad। পরীক্ষাগুলির সাফল্য প্রস্থান কোড হিসাবে জানানো হবে।

দ্বারা পরিচালিত প্রোগ্রামটির প্রস্থান কোডটিকে অস্বীকার করার জন্য আমি একটি বৈধ বাশ সিনট্যাক্স পেয়েছি git bisect run:

git bisect start
git bisect bad HEAD                 # last revision known to PASS the tests
git bisect good $LAST_FAIL_REVISION # last revision known to FAIL the tests
git bisect run bash -c "! prove"

এটি আমাকে দ্বারা চালিত পরীক্ষাগুলি পাস করার জন্য প্রথম সংশোধন দিয়েছে prove


4
আমি সম্মত, আমি বরং আমার পরীক্ষার কেসটি সংশোধন করব না যাতে এটি নিখুঁত।
সানলিনসলে 17'9

8

গিট এখন আপনাকে সেগুলি সংজ্ঞা না দিয়ে oldএবং ব্যবহার করতে দেয় new। আপনাকে git bisect startআরও যুক্তি হিসাবে কমিট না করে কল করতে হবে , তারপরে কল করে সঠিকভাবে বাইসেশনটি শুরু করুন

git bisect old <rev>
git bisect new <rev>

https://git-scm.com/docs/git-bisect#_alternate_terms

এটিই মূলত @ মার্সকে পরামর্শ দিচ্ছিল কার্যকর করা উচিত।


4
এটি সর্বাধিক প্রাসঙ্গিক উত্তর (আধুনিক গিটের জন্য)। এবং প্রারম্ভকালীন কমান্ডটি হওয়া উচিত (আপনার ভাগ করা লিঙ্ক অনুসারে):git bisect start --term-new fixed --term-old broken
স্যাম প্রোটসেনকো

সত্য। এই বিকল্পগুলি কখন চালু করা হয়েছিল? আমি আমার উত্তর আপডেট করতে চাই।
মাইকেল উলফ

@ মিশেল ওল্ফ তারা সংস্করণ 2.7.0 এ উপস্থিত হয়েছিল ।
GKFX

6

Git alias লেখা একটি ভাল ধারণা অবশ্য পদ fixedএবং unfixedতুলনায় একই সমস্যা আছে goodএবং bad: আপনি তাদের সঙ্গে সামঞ্জস্যপূর্ণ হতে থাকতে পারে না উভয় রিগ্রেশন এবং progressions,। যে কোনও উপায়ে কাজ করে এমন শব্দগুলি খুঁজে পাওয়া সহজ: মূল বাইনারি অনুসন্ধান পরিভাষা থেকে এগুলি বেছে নিন যা প্রকৃতিতে নিরপেক্ষ যা ভাল বা খারাপ তার কোনও প্রাক-ধারণা নেই। এই ক্ষেত্রে:

git config --global alias.bisect-high 'bisect bad'
git config --global alias.bisect-low  'bisect good'

এ জাতীয় নিরপেক্ষ পদগুলির সাথে আপনি সর্বদা টাইপ করতে পারেন: git bisect-high(বা git bisect-upper, বা git-bisect max, ... আপনার পছন্দ!) আপনি রিগ্রেশন বা কোনও সমাধান খুঁজছেন কিনা

গিট বাইসেক্ট বিকাশকারীরা খুব খারাপভাবে কেবল বিদ্যমান পদগুলির কোনওটিই পুনরায় ব্যবহার করতে পারেনি। ইউজার ইন্টারফেস Git নয় উদ্বিগ্নতা তুলে ধরে সাধারণভাবে বলতে: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/


থেকে: git.github.io/rev_news/2015/07/08/edition-5 "" কিছু প্যাচ সিরিজটি ভাল-খারাপের পরিবর্তে গিট বিসেক্টকে একটি স্বতন্ত্র জোড় পদ ব্যবহার করার অনুমতি দেওয়ার জন্য পালিশ করা হচ্ছে ... "
মার্চএইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.