3

git bisectこれらのファイルを変更するコミットのみがテストされるように、パスのリストを渡すことができます。

追跡している問題にツリーのどの部分が関係しているかがわかっている場合は、bisect start コマンドを発行するときにパス パラメーターを指定することで、試行回数をさらに減らすことができます。

$ git bisect start -- arch/i386 include/asm-i386

ただし、これの二重にしたいと思います。特定のファイルのみに触れるコミットを無視するので、次のようになります

$ git bisect start --unrelated arch/i386 include/asm-i386

andに触れるコミットはスキップしますがarch/i386/foo.c、andinclude/asm-i386/utils.sに触れるコミットは含まれますarch/i386/bar.c(arch/amd64/baz.c後者はリストされたパスの下になく、コミット全体が関連するため)。

それを行う方法はありますか?

4

2 に答える 2

3

あなたが望むことをする方法は、を使用することですbisect run <script>
これまでと同じように bisect を使用し、スクリプト オプションで bisect を使用します。

スクリプトは、スキップするための適切なコードを返します(または、テストできない場合は 125 - あなたの場合にははるかに適しています)。

スクリプト (上記の例では my_script) は、現在のソース コードが適切な場合はコード 0 で終了し、現在のソース コードが不適切な場合は 125 を除く 1 から 127 (両端を含む) のコードで終了する必要があることに注意してください。

その他の終了コードは、bisect プロセスを中止します。「exit(-1)」で終了するプログラムは $? を残すことに注意してください。= 255 (exit(3) のマニュアル ページを参照)。値は「& 0377」で切り捨てられます。

現在のソース コードをテストできない場合は、特別な終了コード 125 を使用する必要があります。スクリプトがこのコードで終了すると、現在のリビジョンはスキップされます (上記の git bisect skip を参照してください)。126 と 127 は POSIX シェルで特定のエラー ステータスを通知するために使用されるため、この目的で使用する最も適切な値として 125 が選択されました (127 はコマンドが見つからないことを示し、126 はコマンドが見つかったが実行できないことを示します。これらの詳細は「bisect run」に関する限り、これらはスクリプトの通常のエラーであるため、問題ではありません)。

于 2015-06-29T09:56:58.243 に答える
1

codeWizar が言うように、おそらくこのメソッドにはスクリプトを使用する必要があります

書く:

git bisect start HEAD commit-id

このようなものを持っていscript.shます:

[ "$(git diff-tree --no-commit-id --name-only -r HEAD | sort)" = "path"  ] && exit 125
make && exit 0 || exit 1

そして走る

git bisect run script.sh

この線:

[ "$(git diff-tree --no-commit-id --name-only -r HEAD | sort)" = "path"  ] && exit 125

現在のコミットにファイル変更パスが正確に含まれているかどうかをテストし、含まれている場合は 125 を終了します (たとえば、二分するためにそのコミットをスキップします)。

\n内部パスで複数のパスを指定することもできます

于 2015-06-29T10:02:27.673 に答える