Лучшая система контроля версий для приложения для мобильного телефона? - PullRequest
2 голосов
/ 21 мая 2009

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

Как мне управлять такой кодовой базой с точки зрения системы контроля версий?

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

Позвольте мне сделать это немного более понятным с помощью примера. Допустим, я разрабатываю приложение J2ME с использованием MIDP 2.0. Это базовый набор функций, который можно ожидать от всех телефонов, поддерживающих MIDP 2.0. Кроме того, я бы расширил это приложение для определенных наборов телефонов, используя их SDK. Например, Nokia S40, Nokia S60, Sony Ericsson, Blackberry и т. Д. Все эти функции предоставляют дополнительные функциональные возможности, которые позволяют создавать больше поверх базового приложения, и в большинстве случаев это влияет на всю кодовую базу от пользовательского интерфейса до базовой логики.

Один из способов достижения этого - использовать комбинацию системы сборки с флагами препроцессора и пытаться разделить различия настолько, чтобы не было слишком много зависимостей. Это может быть довольно сложно время от времени. Мне интересно, есть ли более простой способ справиться с этим, используя интеллектуальную систему контроля версий ...

Ответы [ 5 ]

2 голосов
/ 21 мая 2009

Я бы посмотрел на Subversion svn: externals .

В SVN 1.5 вы можете использовать относительные ссылки для каталогов, а SVN 1.6 поддерживает внешние файлы на основе файлов.

Например, структура типа,

  • / Phone1 / Base
  • / Phone1 / Feature1
  • / Phone1 / feature2
  • / Phone2 / Base
  • / Phone2 / Feature1
  • / Phone2 / Feature3

Можно легко получить с помощью svn: externals.

В Subversion ваша структура хранилища очень гибкая, вот один из многих способов, которыми вы могли бы это изложить:

  • багажник / Особенности / Base
  • багажник / Особенности / Feature1
  • багажник / Особенности / feature2
  • багажник / Особенности / feature2
  • магистраль / телефоны / телефон1 (с svn: внешняя база, Feature1, ...)
  • Магистраль / Телефоны / Телефон2 (с svn: внешняя база, Feature3, ...)

Один совет: убедитесь, что вы используете определенную ревизию Subversion для каждой внешней ссылки, это может показаться неважным при запуске, но через 6 месяцев будет:)

1 голос
/ 21 мая 2009

Я не думаю, что VCS решит вашу проблему.

Ваша лучшая ставка, возможно, состоит в том, чтобы максимально абстрагироваться от конкретной функциональности телефона и / или использовать модель типа плагина.

У меня был только опыт работы с Subversion, CVS, Starteam и VSS. Ветви - это боль, несмотря ни на что ... особенно если у вас есть несколько активных ветвей. Вы не сможете обойтись без постоянных слияний, сравнений ветвей и попыток отследить, внесли ли вы изменения во все ветви.

1 голос
/ 21 мая 2009

Мне нравится Subversion для проектов, в которых не так много разработчиков. Из вашей постановки проблемы мне кажется, что вы должны быть в состоянии достичь того, что вы хотите, с хорошей системой сборки. Так что я не думаю, что сам контроль исходного кода будет иметь большое значение. Но я могу неправильно понять вашу проблему.

Сайед Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

0 голосов
/ 21 мая 2009

Если вы используете Perforce, вы можете использовать различные сопоставления между депо и рабочими пространствами и делать что-то вроде:

depot/
  common/
  platform1/
    someportedfile
  platform2/
    someportedfile

и сопоставьте его в вашем рабочем пространстве с:

platform1/
  someportedfile
  common/
platform2/
  somtportedfile
  common/
0 голосов
/ 21 мая 2009

Если вы организуете свой код в некоторые базовые модули и некоторые специфичные для телефона модули, которые зависят от базовых модулей, тогда не имеет значения, какую VCS вы используете. Я бы порекомендовал децентрализованную VCS в любом случае (Mercurial, Bazaar, Git).

Вы можете описать, как вы хотите достичь того, чего вы хотите (разные версии приложений с разными наборами функций), чтобы получить более разумный совет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...