We have a large handful of clients that all have similar sites, currently they are all configured with their own application folders that will override the system level files. Due to the drastic nature of the changes, doing overrides is no longer seeming like the ideal solution, instead I would like to move to more of a "boilerplate" type solution. The workflow I had in mind is as follows:
Have a master "boilerplate" that will be branded to our company name, that is the "fully-loaded" package, all possible features, etc.
For each client, we will have a new clone of this boilerplate, that contains all of its client-specific changes (different views, images, models, configs, etc).
Whenever we add a new feature, fix bugs, or improve performance on the master boilerplate, I would like to push/pull these changes to each of the clients. note: I like the fact that each will require its own push/pull so that we are not forced into updating all clients at once if we do not want to. This allows us to handle potential issues one client at a time. I can write a script to do batch push/pulls if needed for safe pushes.
My concern is that with every push/pull to the client clones, I will have to deal with conflicts every single time, since the changes on the client repos could potentially be in any file.
I was curious to see what people thought about the best way of handling this situation. My limited knowledge of git tells me that branches is a bad idea, and I do not think a sub-module will be possible due to the nature of the changes required on each clone. I have read up a little on git rerere, but am not sure that the conflicts will be predictable enough for this to be effective.
Thanks in advance for any advice you may have, I am really excited to get off svn and switch to this type of setup, I think it will greatly improve our productivity and development times!
Isolate the code/config that turns on/off the features for each vendor. You can now have a branch per vendor with their own customizations. The key is that you supply default values, which are in effect with no config. Once you add config, it overrides the default.
In this manner, you can update the individual vendor branches and because you are not changing any config, you will "inherit" the improvements even thought there are custom configurations.
You almost want to do what git does with it's config. You have a system, global and local setting for any config.