We have a base system that is customized for each client. The base lives in its own repository, and each client lives in its own repository (originally cloned from base).
The goal is to have the ability to add bug fixes/features to base, which can be propagated to clients, on demand.
So far the workflow has been as follows:
- Make commits/topic branches for the base fixes/features: (on base, master)
git commit -m "Fix admin typo"
- Merge those changes into the client: (on client, master)
git merge base/master
. Obviously, this includes fixing any conflicts between base and the client's customizations. - Push the merge to client's origin: (on client, master)
git push origin master
- Our convention has been to pull with rebase (to keep history readable). So, then a different developer working on the client project would (on client, master)
git pull --rebase origin master
It is at this point that we reach significant problems with that pull/rebase. Developers get conflicts in the pull/rebase done after a merge from the base into client. And its not just a few conflicts, it's many (for many of the commits being replayed?), and often code that particular developer never even touched. I think this is unreasonable and unsustainable.
What's the best solution here?
My only thought is to stop using rebase when pulling and deal with sloppy and hard-to-read logs, but I'd rather not have to do this. These client projects can live on for years, and I'd like to be able to still make some sense out of base system merges in the future.