我有一个包含多个子项目且没有子树或子模块的存储库。我现在有一个关于项目 C 中需要修复的新功能的错误。C 依赖于项目 A 和 B。
为了使该功能正常工作,我需要最新版本的 Project A。
在项目 B 的某个地方,引入了该错误。所以我的问题是:
我可以运行 git bisect 并告诉它只对项目 B 的源代码树进行操作,同时将 A 和 C 保持在最新版本吗?
不, git bisect 不支持。你永远不应该把不同的项目放到同一个 repo 中。Git 不喜欢也不支持。尽管如此,您仍然可以执行以下操作:
git bisect
这里基本上有两种模式:普通模式和普通 --no-checkout
模式。您可以使用两者中的任何一个以不同的方式实现您的目标:
git bisect
并在每一步中,在测试之前,将正确版本的子项目放在工作树中,使用git checkout master -- sub/project/folder
. 您可能必须在测试后撤消该操作,然后才能继续平分。--no-checkout
: 运行git bisect start --no-checkout
。BISECT_HEAD
现在,除了设置参考之外,这些步骤不会对您的 repo 产生任何影响。仅使用此参考来签出 projectB git checkout BISECT_HEAD path/to/projectB
:。现在做你的测试。我会推荐这种--no-checkout
方法。请注意,虽然 3lectrologos 的提示不起作用,但它仍然有用。给出 ProjectB 的路径git bisect
将允许利用错误只能在包含对 ProjectB 的更改的修订中引入的事实。
我认为git bisect start -- path/to/projectB
应该做的伎俩。
注意:正如下面的评论中所指出的,这不会使 repo 的其余部分保持其最新状态,但会一分为二,仅考虑对指定路径进行更改的提交。