【问题标题】:git bisect with list of *uninteresting* paths带有 *uninteresting* 路径列表的 git bisect
【发布时间】:2015-09-15 17:02:01
【问题描述】:

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 的提交(因为后者不在列出的路径下,因此整个提交是相关的)。

有没有办法做到这一点?

【问题讨论】:

    标签: git git-bisect


    【解决方案1】:

    做你想做的事的方法是使用bisect run <script>
    像您目前所做的那样使用 bisect,并将 bisect 与 script 选项一起使用。

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

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

    任何其他退出代码都会中止平分过程。应该注意的是,通过“exit(-1)”终止的程序会留下 $? = 255,(参见 exit(3) 手册页),因为该值被“& 0377”截断。

    当无法测试当前源代码时,应使用特殊退出代码 125。如果脚本使用此代码退出,则将跳过当前版本(请参阅上面的 git bisect skip)。 125 被选为用于此目的的最高合理值,因为 POSIX shell 使用 126 和 127 来表示特定的错误状态(127 表示未找到命令,126 表示已找到命令但不可执行——这些细节确实没关系,因为它们是脚本中的正常错误,就“二等分运行”而言)。

    【讨论】:

      【解决方案2】:

      正如 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 指定多个路径

      【讨论】:

      • 但是对于包含path 中更改的提交,即使path 之外也有更改,这不会返回“无趣”吗?
      • 对,我已经使用git diff-tree --no-commit-id --name-only -r HEAD | sort 更新了我的答案,它为您提供了 HEAD 更改文件的列表
      • 在第二次阅读时,这仍然不能令人满意,因为这需要测试是完全自动化的。在我的场景中,我有一个主要是手动过程来确定给定的提交是good 还是bad,我看不到script.sh 的方式来表示“这个提交不能被跳过,但是需要手动测试”。
      • 您也可以使用“git bisect good / git bisect bad”手动运行 bisect,并在每次测试前运行[ "$(git diff-tree --no-commit-id --name-only -r HEAD | sort)" = "path" ] && git bisect skip
      猜你喜欢
      • 2020-08-23
      • 2020-07-19
      • 2021-06-14
      • 2015-07-07
      • 2011-03-11
      • 2020-07-26
      • 2014-08-10
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多