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