গিট বাইসেক্ট কীভাবে ব্যবহার করবেন?


438

আমি git bisectদুর্দান্ত কিছু বলে কিছু নিবন্ধ পড়েছি । তবে আমি কোনও স্থানীয় বক্তা নই এবং কেন এটি দুর্দান্ত তা আমি বুঝতে পারি না।

কেউ দয়া করে কিছু কোড নমুনা দিয়ে প্রদর্শিত করতে পারেন:

  1. এটি কিভাবে ব্যবহার করতে?
  2. এটা ঠিক কি মত svn blame?

@ 01: গিট বইটি যেমন বলেছে: প্রকল্পের ইতিহাসের মাধ্যমে একটি বর্বর-অনুসন্ধান অনুসন্ধান করুন
17:51

7
না /// ব্রুট :-) নয়, এটি বাইনারি অনুসন্ধান ব্যবহার করে।
cojocar

"গিট দোষ" "এসএনএন দোষ" এর মতো। "গিট বাইসেক্ট" সম্পূর্ণ ভিন্ন জিনিস
উইলিয়াম পার্সেল

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

4
আপডেট হওয়া বইয়ের লিঙ্ক: git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary- অনুসন্ধান
gdelfino

উত্তর:


655

পিছনে ধারণাটি git bisectহ'ল কোনও নির্দিষ্ট প্রতিরোধের সন্ধানের জন্য ইতিহাসে বাইনারি অনুসন্ধান করা। কল্পনা করুন যে আপনার নিম্নলিখিত বিকাশের ইতিহাস রয়েছে:

... --- 0 --- 1 --- 2 --- 3 --- 4* --- 5 --- current

আপনি জানেন যে আপনার প্রোগ্রামটি currentপুনর্বিবেচনায় সঠিকভাবে কাজ করছে না এবং এটি পুনর্বিবেচনায় কাজ করছে 0। সুতরাং রিগ্রেশন সম্ভবত করে এক চালু করা হয় 1, 2, 3, 4, 5, current

আপনি প্রতিটি প্রতিশ্রুতি পরীক্ষা করে দেখতে, এটি তৈরি করতে, রিগ্রেশনটি উপস্থিত কিনা তা পরীক্ষা করে দেখতে পারেন। যদি প্রচুর পরিমাণে কমিট থাকে তবে এটি দীর্ঘ সময় নিতে পারে। এটি একটি লিনিয়ার অনুসন্ধান। বাইনারি অনুসন্ধান করে আমরা আরও ভাল করতে পারি। git bisectকমান্ড এটিই করে। প্রতিটি পদক্ষেপে এটি সংশোধনগুলির সংখ্যা হ্রাস করার চেষ্টা করে যা সম্ভাব্যভাবে অর্ধেক দ্বারা খারাপ।

আপনি কমান্ডটি এর মতো ব্যবহার করবেন:

$ git stash save
$ git bisect start
$ git bisect bad
$ git bisect good 0
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[< ... sha ... >] 3

এই আদেশের পরে, gitএকটি প্রতিশ্রুতি চেকআউট করবে। আমাদের ক্ষেত্রে, এটি প্রতিশ্রুতিবদ্ধ হতে হবে 3। আপনার নিজের প্রোগ্রামটি তৈরি করতে হবে এবং রিগ্রেশনটি উপস্থিত আছে কিনা তা পরীক্ষা করে দেখুন। রিগ্রেশন উপস্থিত থাকলে, না থাকলে তা দিয়ে আপনাকেও gitএই সংশোধনের স্থিতি জানাতে হবে।git bisect badgit bisect good

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

$ make
$ make test
... ... ...
$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 1 step)
[< ... sha ... >] 5

এরপরে এটি আরও একটি প্রতিশ্রুতি চেকআউট করবে। হয় 4বা 5(যেমন দুটি কমিট রয়েছে) ধরা যাক এটি বাছাই করা আছে 5। একটি বিল্ডের পরে আমরা প্রোগ্রামটি পরীক্ষা করে দেখি যে রিগ্রেশনটি উপস্থিত রয়েছে। তারপরে আমরা এটিতে বলি git:

$ make
$ make test
... ... ...
$ git bisect bad
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[< ... sha ... >] 4

আমরা শেষ সংশোধন পরীক্ষা 4,। এবং যেহেতু এটি হ'ল প্রতিরোধের সূচনা, তাই আমরা এটি বলি git:

$ make
$ make test
... ... ...
$ git bisect bad
< ... sha ... > is the first bad commit
< ... commit message ... >

(এই সহজ পরিস্থিতিতে, আমরা কেবল পরীক্ষা 3 সংস্করণ ছিল 3, 4, 5) পরিবর্তে 4 ( 1, 2, 3, 4)। এটি একটি ছোট জয়, তবে এটি কারণ আমাদের ইতিহাস এত ছোট। যদি অনুসন্ধানের সীমাটি N কমিটের হয় তবে আমাদের 1 + লগ 2 পরীক্ষা করার আশা করা উচিত N git bisectপ্রায় 2/2 রৈখিক অনুসন্ধানের পরিবর্তে কমিট করে comm

একবার আপনি প্রতিশ্রুতিটি প্রবর্তন করে এমন প্রতিশ্রুতি সন্ধান করার পরে, সমস্যাটি সন্ধান করার জন্য আপনি এটি অধ্যয়ন করতে পারেন। এটি হয়ে গেলে আপনি কমান্ডটি git bisect resetব্যবহারের আগে সমস্ত কিছু আবার মূল অবস্থায় ফিরিয়ে আনতে ব্যবহার git bisectকরেন।


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

4
আপনি git bisect bad <rev> [<rev>...]নির্দিষ্ট সংশোধনগুলি খারাপ (বা ভাল git bisect good <rev> [<rev>...]) এর সাথে চিহ্নিত করতে ব্যবহার করতে পারেন । revকোনও শাখার নাম, ট্যাগ, কমিট হ্যাশ (অথবা কমিট হ্যাশের অনন্য উপসর্গ) এর মতো যে কোনও সংশোধন সনাক্তকারী হতে পারে, ...
সিলেভেন ডিফ্রেসনে

39
... এবং একবার শেষ হয়ে গেলে, আপনি git bisect resetসাম্প্রতিক প্রতিশ্রুতিতে সবকিছু ফিরিয়ে দিতে টাইপ করুন
পিটোন

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

3
@ নমোডেন, হ্যাঁ, এটি মূলত এটি যে কোনও ধরণের প্রকল্পের জন্য কার্যকর হতে পারে। আপনাকে কেবল "ওয়েবসাইট তৈরি করুন এবং ইস্যুটি পুনরায় উত্পাদন করুন" দিয়ে "পরীক্ষা করুন" পদক্ষেপটি প্রতিস্থাপন করতে হবে
alex.b

159

git bisect run স্বয়ংক্রিয় দ্বিখণ্ডিত

যদি ./testপরীক্ষাটি ঠিক থাকে তবে আপনার যদি স্বয়ংক্রিয় স্ক্রিপ্টের প্রস্থান স্থিতি 0 থাকে তবে আপনি স্বয়ংক্রিয়ভাবে বাগটি খুঁজে পেতে পারেন bisect run:

git checkout KNOWN_BAD_COMMIT
git bisect start

# Confirm that our test script is correct, and fails on the bad commit.
./test
# Should output != 0.
echo $?
# Tell Git that the current commit is bad.
git bisect bad

# Same for a known good commit in the past.
git checkout KNOWN_GOOD_COMMIT
./test
# Should output 0.
echo $?
# After this, git automatically checks out to the commit
# in the middle of KNOWN_BAD_COMMIT and KNOWN_GOOD_COMMIT.
git bisect good

# Bisect automatically all the way to the first bad or last good rev.
git bisect run ./test

# End the bisect operation and checkout to master again.
git bisect reset

এটি অবশ্যই অনুমান করে যে যদি পরীক্ষার স্ক্রিপ্টটি ./testগিট ট্র্যাক করা হয় তবে এটি দ্বিখণ্ডনের সময় কিছু পূর্বের প্রতিশ্রুতিতে অদৃশ্য হয় না।

আমি দেখতে পেয়েছি যে খুব ঘন ঘন আপনি গাছের বাইরে থাকা বৃক্ষের স্ক্রিপ্টটি অনুলিপি করে এবং সম্ভবত- PATHপছন্দযুক্ত ভেরিয়েবলগুলির সাথে খেলে এবং সেখান থেকে সেখান থেকে চালিয়ে যেতে পারেন।

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

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

আরও টিপস

এখানে ফিরে যাওয়ার পরিবর্তে দ্বিখণ্ডিত হওয়ার পরে প্রথম ব্যর্থ প্রতিশ্রুতিবদ্ধ থাকুন master:

git bisect reset HEAD

start+ প্রাথমিক badএবং একসাথে good:

git bisect start KNOWN_BAD_COMMIT KNOWN_GOOD_COMMIT~

হিসাবে একই:

git checkout KNOWN_BAD_COMMIT
git bisect start
git bisect bad
git bisect good KNOWN_GOOD_COMMIT

এখন পর্যন্ত কী পরীক্ষা করা হয়েছে তা দেখুন (ম্যানুয়াল goodএবং badবা দ্বারা run):

git bisect log

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

git bisect log
git bisect start
# bad: [00b9fcdbe7e7d2579f212b51342f4d605e53253d] 9
git bisect bad 00b9fcdbe7e7d2579f212b51342f4d605e53253d
# good: [db7ec3d602db2d994fe981c0da55b7b85ca62566] 0
git bisect good db7ec3d602db2d994fe981c0da55b7b85ca62566
# good: [2461cd8ce8d3d1367ddb036c8f715c7b896397a5] 4
git bisect good 2461cd8ce8d3d1367ddb036c8f715c7b896397a5
# good: [8fbab5a3b44fd469a2da3830dac5c4c1358a87a0] 6
git bisect good 8fbab5a3b44fd469a2da3830dac5c4c1358a87a0
# bad: [dd2c05e71c246f9bcbd2fbe81deabf826c54be23] 8
git bisect bad dd2c05e71c246f9bcbd2fbe81deabf826c54be23
# bad: [c536b1b7242d5fcf92cd87e9a534bedb1c0c9c05] 7
git bisect bad c536b1b7242d5fcf92cd87e9a534bedb1c0c9c05
# first bad commit: [c536b1b7242d5fcf92cd87e9a534bedb1c0c9c0

সময়ের আরও ভাল ধারণা পেতে গিট লগে ভাল এবং খারাপ রেফারেন্সগুলি দেখান:

git log --decorate --pretty=fuller --simplify-by-decoration master

এটি কেবলমাত্র একই রেফের সাথে প্রতিশ্রুতি দেখায় যা শব্দের গ্রেলে হ্রাস করে তবে এতে স্বয়ংক্রিয়রূপিত রেফগুলি অন্তর্ভুক্ত থাকে:

refs/bisect/good*
refs/bisect/bad*

যা আমাদেরকে কমিটকে ভাল বা খারাপ হিসাবে চিহ্নিত হিসাবে চিহ্নিত করে।

আপনি যদি কমান্ডটি নিয়ে খেলতে চান তবে এই পরীক্ষার রেপো বিবেচনা করুন ।

ব্যর্থতা দ্রুত, সাফল্য ধীর

কখনও কখনও:

  • ব্যর্থতা দ্রুত ঘটে, যেমন প্রথম পরীক্ষার একটি বিরতি s
  • সাফল্য কিছুটা সময় নেয়, যেমন ভাঙা পরীক্ষায় উত্তীর্ণ হয় এবং অন্যান্য সমস্ত পরীক্ষাগুলি অনুসরণের জন্য আমাদের যত্ন নেই

এই ক্ষেত্রে যেমন ধরুন ব্যর্থতাটি সর্বদা 5 সেকেন্ডের সাথে ঘটে এবং আমরা যদি পরীক্ষাকে আমাদের যতটা করা উচিত ঠিক তেমন সুনির্দিষ্ট করতে অলস হয়ে থাকি তবে আমরা নিম্নলিখিত হিসাবে ব্যবহার করতে পারি timeout:

#!/usr/bin/env bash
timeout 5 test-command
if [ $? -eq 1 ]; then
  exit 1
fi

এই যেহেতু কাজ করে timeoutপ্রস্থান করে 124ব্যর্থতার যখন test-commandপ্রস্থানের 1

যাদু থেকে প্রস্থান স্থিতি

git bisect run প্রস্থান স্থিতি সম্পর্কে কিছুটা বাছাই:

  • 127 এর উপরে যে কোনও কিছু বাইসিকেশনকে এমন কিছু দিয়ে ব্যর্থ করে তোলে:

    git bisect run failed:
    exit code 134 from '../test -aa' is < 0 or >= 128
    

    বিশেষত, একটি সি assert(0)বাড়ে SIGABRTএবং 134 স্ট্যাটাস সহ প্রস্থান করে, খুব বিরক্তিকর oy

  • 125 ম্যাজিক এবং রানটি এড়িয়ে যায় git bisect skip

    এর উদ্দেশ্য হ'ল সম্পর্কিত সম্পর্কহীন কারণে ভাঙা বিল্ডগুলি এড়িয়ে যেতে সহায়তা করা।

দেখুন man git-bisectবিস্তারিত জানার জন্য।

সুতরাং আপনি যেমন কিছু ব্যবহার করতে পারেন:

#!/usr/bin/env bash
set -eu
./build
status=0
./actual-test-command || status=$?
if [ "$status" -eq 125 ] || [ "$status" -gt 127 ]; then
  status=1
fi
exit "$status"

2.16.1 গিট পরীক্ষিত।


7
পূর্ববর্তী / খারাপ পুনর্বিবেচনা (যখন আপনার নতুন লিখিত পরীক্ষা ছিল না) ফেরত / দ্বিখণ্ডিত করার সময় গিট কীভাবে আপনার নতুন পরীক্ষাটি অদৃশ্য হতে থাকবে তা জানতে পারে?
thejjorn

8
@ থেইজজর্ন আপনার একটি বক্তব্য রয়েছে: আমি যতদূর জানি, হয় পরীক্ষা অবশ্যই বাহ্যিক পরীক্ষায় বহিরাগত কার্যকর হতে হবে, অথবা রেপোতে একটি অক্ষরযুক্ত ফাইলের মধ্যে। অনেক ক্ষেত্রে এটি সম্ভব: একটি পৃথক ফাইলে পরীক্ষা রাখুন, ভালভাবে তৈরি করা test_script+ মডুলার টেস্ট স্যুট সহ প্রয়োজনীয় পরীক্ষার বয়লারপ্লেট অন্তর্ভুক্ত করুন এবং দ্বিখণ্ডিত করার সময় পৃথক ফাইল থেকে চালান। আপনি যখন ঠিক করেন, পরীক্ষাটি প্রধান পরীক্ষার স্যুটটিতে মার্জ করুন।
Ciro Santilli 郝海东 冠状 病 六四 事件

1
@ সিরোস্যান্টিলি 六四 事件 法轮功 纳米比亚 威 视 দুঃখিত, আমি নীচে আপনার সম্পাদনাটি ফিরিয়ে নিয়েছি, কারণ আমি নবীনদের জন্য এটির আরও ব্যাখ্যাযোগ্য মনে করছি এবং এটি আপনার উত্তরটির আরও একটি পয়েন্ট যুক্ত করেছে (আপনার হিসাবে সঠিক উত্তর নয় - তাই উল্লেখ করে, এটির একটি পয়েন্ট যোগ করতে)
নিক

1
'গিট দ্বিখণ্ডিত রান' দিয়ে ভুল হওয়ার অনেকগুলি উপায় রয়েছে - উদাহরণস্বরূপ যে কোনও খারাপ সংযোজন দ্বারা কোনও ভাল প্রতিশ্রুতি কীভাবে বিপরীত হয়েছিল তা দেখে। এটি আবার বাইরে ফিরে আসে এবং কেবল সর্বশেষ "আউট" খারাপ হয়। তবে আপনি সর্বদা একটি ম্যানুয়াল 'গিট বাইসেক্ট' করতে পারেন। এটি দ্বিখণ্ডিত হওয়ার কারণে এটি কেবল কয়েকটি পদক্ষেপ নেয় - যেমন 1024 পদক্ষেপে 1024 কমিট করে।
সমন্বয়কারী

1
@combinatorist আপনি ঠিক বলেছেন যে এটি ব্যর্থ হতে পারে। bisect runপরীক্ষাটি শেষ করতে দীর্ঘ সময় নিলে আমি বিশেষভাবে দরকারী মনে করি এবং আমি নিশ্চিত যে পরীক্ষার ব্যবস্থাটি ভাঙ্গবে না। এইভাবে, আমি কেবল ব্যাকগ্রাউন্ডে চলতে বা রাতারাতি যদি এটি খুব বেশি সংস্থান গ্রহণ করে, কোনও মস্তিষ্কের প্রসঙ্গে সুইচ সময় না হারিয়ে ফেলে রাখতে পারি।
সিরো সান্তিলি :40 冠状 病 六四 事件 法轮功

124

টি এল; ডিআর

শুরু করুন:

$ git bisect start
$ git bisect bad
$ git bisect good <goodcommit>

Bisecting: X revisions left to test after this (roughly Y steps)

পুনরাবৃত্তি করুন:

ইস্যু এখনও বিদ্যমান?

  • হ্যাঁ: $ git bisect bad
  • নং: $ git bisect good

ফলাফল:

<abcdef> is the first bad commit

যখন সম্পন্ন:

git bisect reset

3
আপনি আপনার গিট রেপোর মূলে রয়েছেন তা নিশ্চিত করুন বা আপনি একটি অদ্ভুত পাবেন "আপনার এই আদেশটি কার্যকারী গাছের শীর্ষ স্তরের থেকে চালানো দরকার need" ত্রুটি.
পিআর হোয়াইটহেড

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

@ গব্লিনস যখন বাগটি উপস্থিত না থাকে, ঠিক তখনই git bisect goodপরবর্তী প্রতিশ্রুতিতে যান।
জেফ্রি হেল

40

কেবল আরও একটি বিষয় যুক্ত করতে:

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

এছাড়াও, যদি কোনও নির্দিষ্ট প্রতিশ্রুতি ভাল না খারাপ বলা শক্ত হয় তবে আপনি চালাতে পারেন git bisect skip, যা এটিকে উপেক্ষা করবে which পর্যাপ্ত পরিমাণ অন্যান্য কমিট রয়েছে তা প্রদত্ত, গিট বিসেক্ট এর পরিবর্তে অনুসন্ধান সংকীর্ণ করতে অন্য একটি ব্যবহার করবে।


15

$ git bisect ..ডিবাগিংয়ের জন্য মূলত একটি গিট সরঞ্জাম । আপনার শেষ (পরিচিত) কার্যনির্বাহী প্রতিশ্রুতি থেকে পূর্ববর্তী কমিটগুলি পেরিয়ে 'গিট বিসেক্ট' ডিবাগ করে । এটি বাইনারি অনুসন্ধান ব্যবহার করে সেই সমস্ত প্রতিশ্রুতিগুলির মধ্য দিয়ে যেতে, যেটি রিগ্রেশন / বাগ প্রবর্তন করেছিল তার কাছে যেতে।

$ git bisect start # দ্বিখণ্ডা শুরু হচ্ছে

$ git bisect bad # উল্লেখ করে যে বর্তমান কমিট (v1.5) এর রিগ্রেশন / সেটিং 'খারাপ' পয়েন্ট রয়েছে

$ git bisect good v1.0 # এটি সর্বশেষ ভাল কাজ করার প্রতিশ্রুতি উল্লেখ করুন (বিনা বাধায়)

'খারাপ' এবং 'ভাল' পয়েন্টগুলির এই উল্লেখটি গিট বিসেক্ট (বাইনারি অনুসন্ধান) মধ্যের উপাদান বাছাই করতে সহায়তা করবে (ভি 1.3 প্রতিশ্রুতিবদ্ধ)। যদি প্রতিস্থাপনটি ভি 1.3-তে থাকে তবে আপনি এটিকে নতুন 'খারাপ' পয়েন্ট হিসাবে সেট করবেন ( ভাল -> ভি 1.0 এবং খারাপ -> ভি 1.3 )

$ git bisect bad

বা তেমনিভাবে যদি প্রতিশ্রুতিবদ্ধ V1.3 বাগ-মুক্ত হয় তবে আপনি এটিকে নতুন 'গুড পয়েন্ট' হিসাবে সেট করবেন (যেমন - * ভাল -> ভি 1.3 এবং খারাপ -> ভি 1.6)।

$ git bisect good

2

দ্রষ্টব্য: শর্তাদি goodএবং badকেবলমাত্র কোনও নির্দিষ্ট সম্পত্তির সাথে বা ছাড়াই প্রতিশ্রুতি চিহ্নিত করার জন্য আপনি ব্যবহার করতে পারবেন না।

গিট 2.7 (Q4 2015) নতুন git bisectবিকল্পগুলি চালু করেছে ।

 git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]
                  [--no-checkout] [<bad> [<good>...]] [--] [<paths>...]

ডকুমেন্টেশন যুক্ত করার সাথে:

কখনও কখনও আপনি সেই প্রতিশ্রুতি সন্ধান করেন না যা একটি বিরতি প্রবর্তন করেছিল, বরং এমন একটি প্রতিশ্রুতির জন্য যা কিছু "পুরানো" রাষ্ট্র এবং "নতুন" রাষ্ট্রের মধ্যে পরিবর্তনের কারণ হয়েছিল

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

এই ধরনের ক্ষেত্রে "পরিবর্তনের পূর্বে রাষ্ট্র" এবং "পরিবর্তনের পরে রাষ্ট্র" বোঝাতে "ভাল" এবং "খারাপ" শব্দটি ব্যবহার করা খুব বিভ্রান্তিকর হতে পারে।

সুতরাং পরিবর্তে, আপনি শর্তাদি "ব্যবহার করতে পারেন old" এবং " newযথাক্রমে" এর জায়গায় ", good" এবং " bad"।
(তবে খেয়াল করুন যে আপনি " good" এবং " bad" " old" " " "এবং" new"" একক সেশনে মিশতে পারবেন না ))

এই আরও সাধারণ ব্যবহারে, আপনি git bisectএকটি " new" কমিটের কিছু সম্পত্তি এবং একটি " old" প্রতিশ্রুতি আছে যা তার সম্পত্তি নেই provide

প্রতিবার git bisectকোন প্রতিশ্রুতি পরীক্ষা করে দেখুন, যদি প্রতিশ্রুতিবদ্ধ সম্পত্তিটি থাকে তবে আপনি পরীক্ষা করেন:
যদি তা হয়, তবে কমিটটিকে " new" হিসাবে চিহ্নিত করুন ; অন্যথায় এটি " old" হিসাবে চিহ্নিত করুন ।

দ্বিখণ্ডিত হয়ে গেলে, git bisectসম্পত্তিটি প্রবর্তন করে বলে প্রতিবেদন করবে।


দেখুন কমিট 06e6a74 , কমিট 21b55e3 , কমিট fe67687 দ্বারা (29 জুন 2015) Matthieu মধ্যে Moy ( moy)এন্টোইন ডেলাইট ( ) দ্বারা 21e5cfd (29 জুন 2015) কমিট করুন
দেখুন । (দ্বারা একীভূত junio সি Hamano - - মধ্যে কমিট 22dd6eb , 05 অক্টোবর 2015)CanardChouChinois
gitster

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