Tenemos un sistema base personalizado para cada cliente. La base vive en su propio repositorio, y cada cliente vive en su propio repositorio (originalmente clonado desde la base).Git pull con rebase que causa conflictos excesivos. ¿Cómo puedo arreglar nuestro flujo de trabajo?
El objetivo es tener la capacidad de agregar correcciones de errores/funciones a la base, que se pueden propagar a los clientes, a pedido.
Hasta ahora, el flujo de trabajo ha sido la siguiente:
- Hacer comete/ramas puntuales para las correcciones de base/características: (en la base, maestro)
git commit -m "Fix admin typo"
- Combinar esos cambios en el cliente: (en el cliente, maestro)
git merge base/master
. Obviamente, esto incluye solucionar cualquier conflicto entre la base y las personalizaciones del cliente. - Empuje la fusión con el origen del cliente: (en el cliente, maestro)
git push origin master
- Nuestra convención ha sido para tirar usando rebase (para mantener la historia legible). Por lo tanto, a continuación, un desarrollador diferente a trabajar en el proyecto de cliente haría (en el cliente, maestro)
git pull --rebase origin master
Es en este punto que llegamos a problemas importantes con la tracción/rebase. Los desarrolladores obtienen conflictos en la extracción/rebase después de una fusión desde la base al cliente. Y no son solo algunos conflictos, son muchos (¿muchas de las confirmaciones se reproducen?) Y, a menudo, el código que un desarrollador en particular nunca tocó. Creo que esto es irracional e insostenible.
¿Cuál es la mejor solución aquí?
Mi único pensamiento es dejar de usar rebase al tirar y lidiar con registros descuidados y difíciles de leer, pero prefiero no tener que hacer esto. Estos proyectos de clientes pueden durar años y me gustaría poder seguir teniendo sentido con las fusiones del sistema base en el futuro.
Usted empuja a 'origin/master' y luego tira inmediatamente de allí? ¿No debería eso no hacer nada? – svick
@svick - en este ejemplo, un dev empuja la fusión, otro hace el tirón – Ben