Мы разработали систему, которая использует единую кодовую базу, состоящую из четырех проектов Visual Studio с веб-сайтом администратора и веб-сайтом, ориентированным на клиента (каждая система имеет свою собственную базу данных MS SQL).
Это прекрасно работает, так как все новые веб-сайты (включая администраторов) ссылаются на одни и те же проекты кодовой базы из SVN, поэтому любые изменения, внесенные в кодовую базу, будут доступны для всех веб-сайтов.
Каждый веб-сайт имеет свою главную страницу и разные пользовательские элементы управления (.ascx), поэтому они частично различаются, хотя основная кодировка сайтов одинакова.
Проблема, с которой мы сталкиваемся сейчас, заключается в том, что если есть ошибка, изменение функции или новая функция, мы должны внедрить ее на ВСЕХ сайтах отдельно (как для администратора, так и для сайта клиента). Это начинает сводить нас с ума, а также означает, что мы имеем ОГРОМНУЮ погрешность для реализации изменений.
Я думал об использовании svn: externals, но это станет грязным.
Возможна ветвление с главного веб-сайта и главной системы администратора, но объединение для получения нового кода является серьезной проблемой, поскольку сайты не совпадают.
Я думаю, что хороший обзор мог бы сказать, что разметка для каждого сайта совершенно разная (за исключением сайта администратора, который является просто изменением темы), но основы кода одинаковы.
Каков наилучший способ справиться с этим или мы застряли, делая много копий и вставок?
EDIT
Какие моменты вы хотели бы прояснить?
Возникают следующие проблемы: например, в случае различий в JavaScript страницы макеты HTML могут быть совершенно разными между веб-сайтами. Но код для страниц тот же.
Так что мне нужно будет «синхронизировать» файл и папку, например, найденные в app_code, но и здесь есть проблемы.
Сайт 1 и Сайт 2 могут быть совершенно одинаковыми, просто разные темы.
У сайта 3 есть и другая тема, но он также имеет некоторый специальный код, который требуется только этому сайту, часть кода в app_code также действует по-разному для сайта 1 и сайта 2
Теперь я мог бы легко добиться этого с помощью ветвления, но при слиянии с новыми ветвями, если есть различия в коде, тогда будут серьезные конфликты.
Объединение также стало бы большой задачей и заняло бы слишком много времени, поскольку нам нужно было бы объединять только определенные папки и файлы, хотя вы не можете объединить один файл через ветвь (это может быть неправильно).
Например:
В корне есть файл download.aspx, который возвращает поток как ответ, а не страницу, он используется для проталкивания всех запросов на загрузку через систему.
Таким образом, эта страница на Сайте 1 и Сайте 2 одинакова, но на Сайте 3 она делает что-то дополнительное, чего не требуется или не требуется ни одному другому сайту.
Мы не хотим, чтобы эта сделанная на заказ функция была перегрузкой, поскольку мы не хотим / не нуждаемся в ней для других веб-сайтов, теперь мы больше не можем объединять этот файл с основного веб-сайта, его необходимо объединить вручную.
Надеюсь, это лучше объясняет то, чего я пытаюсь достичь.
РЕДАКТИРОВАТЬ 2
Базовая структура сайта
|- App_code
|- App_Themes
|- Bin
|- Content
| |- Flash
| |- Images
| |- Scripts
| |- Uploaded
|
|- Controls
| |- MasterPage
| | |-MasterPageControls
| |
| |- Navigation
| |- Search
| |- Templates
| | |- Control Templates
| | |- Page Templates
| |
| |- WebServices
|
|- Errors
|
Все, что находится под управлением Navigation, Search, Templates - это файлы .ascx.
В корне есть несколько файлов, включая default.aspx, download.aspx и preview.aspx
Это главные страницы сайта (без учета страниц ошибок), все страницы динамически создаются из БД.
В папке Controls большинство изменений между веб-сайтами происходит в MasterPage и во всех других пользовательских элементах управления.