Rebase parcial del proyecto

Trabajo en un gran proyecto y en realidad solo necesito ciertos directorys de él. Entonces mi proyecto se ve así:

project |- a/ |- b/ \- foo 

Sin embargo, aguas arriba, el proyecto se ve así:

 project |- a/ |- b/ |- c/ |- foo \- bar 

Así que tengo en mi .gitignore:

 c/ bar 

Sin embargo, ahora estoy tratando de volver a establecer la base en master y quiero decirle a git que los patches / hunks que se aplican a bar, c / * o cualquier cosa en .gitignore deben omitirse automáticamente. Sin embargo, se debe tener cuidado de que los parches individuales que cambian trozos en foo y bar solo se apliquen en foo e ignorados en la barra (no solo ignore todo el parche).

¿Hay alguna forma de hacer esto?

Git opera en "commit objects", no en files / directorys. Cada object de confirmación tiene una ID de confirmación única que es un hash de su ID de confirmación anterior y los cambios de esa confirmación.

Lo que significa que ignorar algunos files / directorys crearía un ID de confirmación diferente, por lo que es básicamente equivalente a rehacer todos los cambios en sentido ascendente, y luego crear un nuevo compromiso que borre todos los files que no te gusten.

Probablemente puedas hacer eso localmente con algunos scripts, pero si lo haces, cada confirmación en tu repository local será diferente de la versión en el server, por lo que tendrías que fusionarte cada vez que hagas nuevos cambios en sentido ascendente / empujar algo río arriba.

¿Quizás podrías convencer a los mantenedores del proyecto upstream para dividirlo en submodules más pequeños?

lo siento, creo que tienes que filtrarlo tú mismo. No hay command git para esto.

Prueba tu suerte exportando con git format-patch , haz un difffilter y git am them nuevamente.