Ветви Mercurial против флагов компиляции: одна база кода - несколько продуктов - PullRequest
1 голос
/ 07 января 2011

Скажем, я создаю набор продуктов, которые разделяют большую часть своего кода, но не весь его (например: приложение с несколькими внешними интерфейсами: командная строка, Windows / MAC / Linux GUI, мобильный (минимальный) GUI, веб-интерфейс и т. д.)

Кроме того, допустим, что общий код не может быть легко разделен и «библиотекарирован».

Я планирую использовать именованные ветви Mercurial для различных продуктов (например, ветки: CLI, Windows, MAC, Linux, Mobile, Web) или флаги компиляции в коде (например, #if (FRONT_END == CLI) #elif (FRONT_END == WEB) ...).

Я не удовлетворен ни одним из подходов. вот мои обиды:

названных веток:

  • если я изменяю часть общего кода, мне нужно объединить его со всеми ветками. есть ли команда hg, чтобы сделать это (полу) автоматически?
  • Нелегко / быстро увидеть, как конкретная функция реализована во всех ветвях (визуализировать различия в одной области кода)

флаги компиляции:

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

Можете ли вы предложить:

  • способы смягчить мои сомнения?
  • другая точка зрения
  • элегантные способы объединить 2 подхода

1036 * спасибо *

1 Ответ

0 голосов
/ 28 ноября 2012

Полагаю, У меня есть лучшая стратегия для вас.

Предисловие: Я яростно, яростно ненавижу Код спагетти с подтверждением


Названные ветки неплохие, но у менеджмента есть недостатки, да. После некоторых попыток и неудач я остановился на идее «Single codebase + Multiply MQ patches». Со свежим Mercurial вы можете иметь даже более одной очереди, вы можете использовать защищенные патчи ... в результате у вас есть один ванильный код - много (любых) целей

Будущее чтение: "Mercurial: полное руководство", Глава 12. Управление изменениями с помощью Mercurial Queues и Глава 13. Расширенное использование Mercurial Queues

...