GIT の二分探索 (GIT BISECT)

高洛峰
リリース: 2016-12-14 15:56:35
オリジナル
4136 人が閲覧しました

git によって管理されるコード リポジトリでは、新しいバグが発見された場合、「git bisect」を使用してバイナリ検索を実行し、バグを引き起こしたコミットを見つけることができます。これは、特に Linux、KVM、QEMU などのオープン ソース コミュニティで最も一般的に使用される方法です。
バグが修正された場合、「git bisect」を使用してバグを修正したコミットをバイナリ検索することもできます。ただし、「git bisect」は元々、バグを修正する良い点ではなく、バグを引き起こす悪い点を見つけるために使用されるため、「git bisect」を使用してバグを修正する点を見つけると、GIT ツールから次のエラー メッセージが表示される場合があります。

[root@jay-linux qemu.git]# git bisect start
# commit-4b274b160 is newer than commit-079944e6.
[root@jay-linux qemu.git]# git bisect good 4b274b160
[root@jay-linux qemu.git]# git bisect bad 079944e6
Some good revs are not ancestor of the bad rev.
git bisect cannot work properly in this case.
Maybe you mistake good and bad revs?
ログイン後にコピー

この状況に遭遇した場合は、別の方法で考えることができます。「git bisect」は新しいコミットを不良としてマークし、古いコミットを良好としてマークする場合にのみ適しているため、「git bisect」で良いとみなされるポイントは次のとおりです。悪い点は悪いとマークされ、悪い点は「良い」とマークされ、最後の「最初の悪いコミット」を見つけることは、実際にはバグを修正する「最初の良いコミット」と同じです。
本当に、こういう問題はちょっと考え方を変えるだけで解決できるんです、「常識にとらわれずに考える」ことの大切さを改めて実感しました。

以下は、「git bisect」の使用法を示す例としての qemu.git です:

[root@jay-linux qemu.git]# git bisect reset
Already on 'master'
[root@jay-linux qemu.git]# git bisect start
[root@jay-linux qemu.git]# git bisect good 079944e6
[root@jay-linux qemu.git]# git bisect bad 4b274b16
Bisecting: 55 revisions left to test after this (roughly 6 steps)
[83f58e570f21c3e7227e7fbef1fc0e18b5ed7ea9] rtl8139: preserve link state across device reset
[root@jay-linux qemu.git]# git bisect good
Bisecting: 27 revisions left to test after this (roughly 5 steps)
[4a4343671e183824a3f5db76ad561ce01e6c6e0a] usb/ehci: Move capsbase and opregbase into SysBus EHCI class
[root@jay-linux qemu.git]# git bisect good
Bisecting: 13 revisions left to test after this (roughly 4 steps)
[507066f8a9610c0088df19ce7b3e436f43165ec1] qdev: Include qdev code into *-user, too
[root@jay-linux qemu.git]# git bisect bad
Bisecting: 8 revisions left to test after this (roughly 3 steps)
[c3dd94b129e222e00a4ed00689e11afdd85c740f] Merge remote-tracking branch 'stefanha/net' into staging
[root@jay-linux qemu.git]# git bisect good
Bisecting: 4 revisions left to test after this (roughly 2 steps)
[89eb147c2cfd2c797d3662aa2f55254441f0595a] uhci: stop using portio lists
[root@jay-linux qemu.git]# git bisect bad
Bisecting: 1 revision left to test after this (roughly 1 step)
[358d615b6908b4916c74819ffad823cb4a74314e] exynos4210: Add EHCI support
[root@jay-linux qemu.git]# git bisect bad
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[aee7499a59d6778c10b018da41db4a22655ef8a8] usb/ehci: Add SysBus EHCI device for Exynos4210
[root@jay-linux qemu.git]# git bisect bad
aee7499a59d6778c10b018da41db4a22655ef8a8 is the first bad commit
commit aee7499a59d6778c10b018da41db4a22655ef8a8
Author: Jay <just for fun>
Date:   Sun Dec 16 04:49:45 2012 +0100
### just for testing.  ###
 
:040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M      hw
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート