2

我有一个包含多个子项目且没有子树或子模块的存储库。我现在有一个关于项目 C 中需要修复的新功能的错误。C 依赖于项目 A 和 B。

为了使该功能正常工作,我需要最新版本的 Project A。

在项目 B 的某个地方,引入了该错误。所以我的问题是:

我可以运行 git bisect 并告诉它只对项目 B 的源代码树进行操作,同时将 A 和 C 保持在最新版本吗?

4

2 回答 2

4

不, git bisect 不支持。你永远不应该把不同的项目放到同一个 repo 中。Git 不喜欢也不支持。尽管如此,您仍然可以执行以下操作:

git bisect这里基本上有两种模式:普通模式和普通 --no-checkout模式。您可以使用两者中的任何一个以不同的方式实现您的目标:

  1. 正常:运行git bisect并在每一步中,在测试之前,将正确版本的子项目放在工作树中,使用git checkout master -- sub/project/folder. 您可能必须在测试后撤消该操作,然后才能继续平分。
  2. --no-checkout: 运行git bisect start --no-checkoutBISECT_HEAD现在,除了设置参考之外,这些步骤不会对您的 repo 产生任何影响。仅使用此参考来签出 projectB git checkout BISECT_HEAD path/to/projectB:。现在做你的测试。

我会推荐这种--no-checkout方法。请注意,虽然 3lectrologos 的提示不起作用,但它仍然有用。给出 ProjectB 的路径git bisect将允许利用错误只能在包含对 ProjectB 的更改的修订中引入的事实。

于 2013-04-23T23:48:36.827 回答
1

我认为git bisect start -- path/to/projectB应该做的伎俩。

注意:正如下面的评论中所指出的,这不会使 repo 的其余部分保持其最新状态,但会一分为二,仅考虑对指定路径进行更改的提交。

于 2013-04-23T23:27:00.427 回答