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.c
和include/asm-i386/utils.s
的提交,但会包含触及arch/i386/bar.c
和arch/amd64/baz.c
的提交(因为后者不在列出的路径下,因此整个提交是相关的。)
有办法吗?
答案 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