Abbiamo un sistema di base personalizzato per ogni cliente. La base vive nel proprio repository e ogni client vive nel proprio repository (originariamente clonato dalla base).Git pull con rebase che causa conflitti eccessivi. Come posso sistemare il nostro flusso di lavoro?
L'obiettivo è avere la possibilità di aggiungere correzioni di bug/funzionalità alla base, che possono essere propagate ai client, su richiesta.
Finora il flusso di lavoro è stata la seguente:
- Marchio impegna/argomento rami per le correzioni di base/caratteristiche: (sulla base, master)
git commit -m "Fix admin typo"
- Unire le modifiche al client: (su client, master)
git merge base/master
. Ovviamente, ciò include la risoluzione di eventuali conflitti tra le personalizzazioni di base e del client. - Spingere l'unione all'origine del cliente: (su client, master)
git push origin master
- La nostra convenzione è stata quella di tirare con rebase (per mantenere leggibile la cronologia). Così, poi uno sviluppatore diverso lavoro cliente avrebbe (il cliente, padrone)
git pull --rebase origin master
E 'a questo punto che si raggiunge notevoli problemi con quel tiro/rebase. Gli sviluppatori ottengono conflitti nel pull/rebase fatto dopo un'unione dalla base nel client. E non sono solo alcuni conflitti, sono molti (per molti dei quali vengono ripetuti?), E spesso codificano quel particolare sviluppatore che non ha mai nemmeno toccato. Penso che questo sia irragionevole e insostenibile.
Qual è la soluzione migliore qui?
Il mio unico pensiero è quello di smettere di usare rebase quando si tratta e di gestire registri sciatti e difficili da leggere, ma preferirei non doverlo fare. Questi progetti client possono durare per anni, e mi piacerebbe essere in grado di dare ancora un senso al sistema di base che si fonde in futuro.
Si preme a 'origine/master' e quindi si sposta immediatamente da lì? Non dovrebbe fare niente? – svick
@svick - in questo esempio, un dev spinge l'unione, un altro fa il pull – Ben