Я бы соблазнился организовать вещи так, чтобы настройка была в текстовой форме (возможно, XML, но я думаю, что это не единственный вариант), и основное приложение является универсальным и получает специфические для клиента функции, анализируя эти файлы конфигурации. ,
После этого вы можете иметь репозиторий для каждого клиента, содержащий файлы конфигурации (и, возможно, ресурсы, такие как логотипы и / или пользовательские скрипты), а также репозиторий для основного приложения.
Для данной версии клиента ваша система сборки затем автоматически собирает приложение и хранилище клиента и создает пользовательскую версию.
У меня есть опыт работы с такой системой, и вы можете получить довольно обширную настройку. Сначала это немного усложняет работу приложения, потому что вам нужно добавить функциональность синтаксического анализа, но значительно упрощает управление различными версиями клиентов и несколько менее подвержено ошибкам.