¿Buenas prácticas para gestionar variantes de proyectos en Git?

Tengo que desarrollar dos proyectos Django que comparten el 90% del mismo código, pero tienen algunas variaciones en varias aplicaciones, plantillas y dentro del propio modelo.

Estoy usando Git para control de fuente distribuido.

Mis requerimientos son que:

el código común para ambos proyectos se desarrolla en un solo lugar (entorno de desarrollo de Project1)

periódicamente esto se fusiona en el entorno de desarrollo del segundo proyecto (Proyecto2)

Las variaciones no son fácilmente encapsuladas dentro de las aplicaciones. (Por ejemplo, hay aplicaciones, tales como "perfiles" que varían entre Project1 y Project2 pero para los cuales también hay una evolución común en curso)

Tanto Project1 como Project2 tienen repositorios públicos, por lo que puedo colaborar con otros

de manera similar, Project1 y Project2 deberían tener servidores de desarrollo, demostración, organización y producción.

sin embargo, el repositorio público no está en el mismo servidor en ambos casos. Entonces, por ejemplo, cuando estoy desarrollando en Project1, quiero poder "empujar" a mi servidor github, pero no tener cosas de Project2 que vayan allí.

hay archivos como local_settings.py que son completamente diferentes entre Project1 y Project2, pero deben compartirse entre múltiples desarrolladores de cada proyecto

Entonces, ¿cuál es la mejor manera de manejar esta situación?

Lo que parece ideal sería algo así como un "tirón filtrado" donde, en lugar de .gitignore, diga "ignorar este archivo por completo", puedo decir "ignorar este archivo al tirar de ese repo" No pude ver nada como eso en la documentación, pero podría haber algo así?

Respuestas a la pregunta(5)

Su respuesta a la pregunta