Сценарий использования для SVN филиалов - PullRequest
0 голосов
/ 11 апреля 2010

У меня есть продукт, который я распространяю среди своих клиентов. Каждый клиент нуждается в некоторой настройке пользовательского интерфейса. Я хочу, чтобы каждый клиент мог легко обновляться с новой версией.

Могу ли я создать проект в SVN, который служит «базовым проектом», а затем создать ветви для каждого клиента? С учетом сказанного, смогу ли я потом передать изменения в ветке с возможностью перенести это изменение в ядро? Могу ли я также выполнить и обновить команду в ветке, которая будет обновлять только изменения в ядре?

Ответы [ 3 ]

3 голосов
/ 11 апреля 2010

Mahesh имеет правильный ответ, вы создадите ветвь для каждого и объедините изменения из своей ствола, когда захотите сделать релиз.

Я дам вам несколько советов: избегайте этого!

Неизбежно, , поскольку вы можете настроить полный код, вы будете . Даже «изменения пользовательского интерфейса» могут вызвать проблемы - если вы измените один и тот же фрагмент кода в транке и в пользовательской ветви, настроенной для клиента, это вызовет конфликт, который должен быть разрешен вручную при слиянии. По мере продвижения вперед изменения будут становиться все более и более сложными, а ваши филиалы будут все дальше отделяться от магистрали, ощущая себя все более и более похожим на совершенно другой продукт, нежели настройки.

Рассмотрим сценарий: вам нужно ввести новую функцию или реорганизовать существующую, чтобы исправить некоторые ошибки или просто упростить обслуживание. Однако это изменение нарушит существующий код (например, другие функции). Когда у вас есть единая база кода, по крайней мере, вы можете увидеть, где она сломается, и что вам нужно сделать, чтобы это исправить. Если у вас есть несколько настроенных веток, эта визуализация невозможна.


Лучшая альтернатива - посмотреть, что именно нужно сделать для всех этих клиентов, и создать структуру, позволяющую эти настройки, сохраняя при этом одну кодовую базу.

Если все, что вы хотите сделать, это изменить имя в строке заголовка и пару изображений, просто создайте файл конфигурации (.ini, или XML, или любой другой), который позволяет вам указывать эти вещи. Ваше приложение читает его при запуске. Теперь у вас есть одна кодовая база, и вы просто меняете файл настройки для любого клиента во время развертывания.

Если вам нужно настроить макет графического интерфейса (обычно называемый «скиннингом»), для этого есть готовые интегрированные среды.

В дальнем конце спектра, если вам ДЕЙСТВИТЕЛЬНО нужно предоставить настройки кода, сделайте это с помощью архитектуры плагинов. Создайте интерфейсы, которые предоставляют базовый API, а затем для каждого клиента создайте им настраиваемую библиотеку, которая реализует этот интерфейс, но имеет настраиваемые части для каждого. Вы можете поместить элементы управления, логику кода и т. Д. В библиотеки.

Подробности выходят за рамки этого вопроса, но вы можете сделать с этим практически все, не сталкиваясь с проблемами, которые будут представлять несколько копий (в основном) одного и того же кода.

2 голосов
/ 11 апреля 2010

Да, вы можете делать все, что вы упомянули с SVN!

Вы можете "объединить" ветви с ядром, указав номера начальной и конечной ревизии, которые вы хотите объединить с транком (ядром).

Ветви действуют как отдельная вещь от вашей ствола (ядра), поэтому, когда вы фиксируете ветку, изменения просто находятся в ветке, если вы явно не объедините ее со стволом.

0 голосов
/ 11 апреля 2010

Номенклатура, которую я видел до сих пор, состоит в том, чтобы иметь 3 базовых каталога:

  • ствол: ваше ядро ​​
  • филиалов: все рабочие филиалы
  • теги (или выпуски): все разные версии выпуска. По сути, все, что вы дали клиенту, должно быть там.

Это использование не перегружает сервер: идентичные файлы сохраняются один раз, а не по одному для каждой ветви. Это ясно для пользователя как для пользователя при обновлении.

Когда вам нужно внести некоторые изменения в ствол, сначала объедините ствол с вашей веткой (чтобы убедиться, что у вас есть последние данные из ствола), а затем объедините ветку с стволом. (Убедитесь, что вы ничего не удалили в процессе).

...