¿Puedo usar git bisect en una parte de mi repository?

Tengo un solo repository que contiene varios subproyectos y sin subtreees o submodules. Ahora tengo un error en una nueva característica que debe solucionarse en el Proyecto C. C depende de los proyectos A y B.

Para que la function funcione, necesito la última versión del Proyecto A.

En algún lugar del proyecto B, se introdujo el error. Entonces mi pregunta es:

¿Puedo ejecutar git bisect y decirle que solo opere en el tree de fonts del Proyecto B mientras mantiene A y C en sus últimas versiones?

No, git bisect no es compatible. Nunca deberías sino diferentes proyectos en el mismo repository. A Git no le gusta o apoya eso. Esto es lo que puedes hacer a pesar de eso:

git bisect básicamente tiene dos modos aquí: el modo normal y el modo --no-checkout . Puede usar cualquiera de los dos para lograr su objective de diferentes maneras:

  1. Normal: ejecute git bisect y en cada paso, antes de realizar la testing, ponga la versión correcta de sus subproyectos en el tree de trabajo con git checkout master -- sub/project/folder . Es posible que tenga que deshacer eso después de la testing antes de que pueda continuar con la bisectriz.
  2. --no-checkout : ejecutar git bisect start --no-checkout . Ahora los pasos no tendrán ningún efecto en su repository, además de establecer una reference BISECT_HEAD . Utilice esta reference para verificar projectB solamente: git checkout BISECT_HEAD path/to/projectB . Ahora haz tu testing.

Yo recomendaría el método --no-checkout . Y tenga en count que aunque la sugerencia de 3lectrologos no funcionó, sigue siendo útil. Dar la ruta de ProjectB a git bisect permitirá aprovechar el hecho de que los errores solo se pudieron haber introducido en las revisiones que contienen cambios en ProjectB.

Creo que git bisect start -- path/to/projectB debería hacer el truco.

Nota : Como se señala en los comentarios a continuación, esto no mantendrá el rest del repository en su estado más reciente, sino que se dividirá en dos considerando solo los compromisos que hicieron cambios en la ruta especificada.