git bisect与* uninteresting *路径列表

时间:2015-06-29 09:27:50

标签: git git-bisect

You can pass a list of paths to git bisect以便只测试提交更改这些文件的内容:

  

如果您知道哪个部分,您可以进一步减少试验次数   树的问题涉及到你正在追踪的问题   发出bisect start命令时指定路径参数:

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

但是,我想做这个的双重:忽略只触摸某些文件的提交,所以像

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

会跳过触及arch/i386/foo.cinclude/asm-i386/utils.s的提交,但会包含触及arch/i386/bar.carch/amd64/baz.c的提交(因为后者不在列出的路径下,因此整个提交是相关的。)

有办法吗?

2 个答案:

答案 0 :(得分:3)

实现目标的方法是使用bisect run <script> 像目前为止一样使用bisect,并使用带有脚本选项的bisect。

脚本将返回相应的跳过代码(或125代表不可测试 - 在您的情况下更合适)。

  

请注意,如果当前源代码良好,脚本(上例中的my_script)应该以代码0退出,如果当前源代码不好,则退出时使用1到127(含)之间的代码,但125除外

     

任何其他退出代码都将中止bisect进程。应该注意的是,一个程序终止于&#34;退出(-1)&#34;离开$? = 255,(参见exit(3)手册页),因为该值被&#34;&amp; 0377&#34;

     

当无法测试当前源代码时,应使用特殊退出代码125。如果脚本以此代码退出,则将跳过当前修订(请参阅上面的git bisect)。选择125作为用于此目的的最高敏感值,因为POSIX shell使用126和127来指示特定的错误状态(127表示未找到命令,126表示找到命令但不可执行---这些详细信息无所谓,因为它们是脚本中的正常错误,就“&#34; bisect run&#34;而言”而言。

答案 1 :(得分: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