2009-05-21 5 views
2

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

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

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

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

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

ответ

2

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

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

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

  • /Phone1/База
  • /Phone1/Feature1
  • /Phone1/feature2
  • /Phone2/База
  • /Phone2/Feature1
  • /Телефон2/Особенность3

Было бы легко получить svn: externals.

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

  • багажник/Характеристики/Base
  • хобота/Особенности/Feature1
  • хобота/Особенности/feature2
  • хобота/Особенности/feature2
  • хобота/телефоны/Phone1 (с SVN: внешние базировать, Feature1, ...)
  • багажник/Телефоны/Phone2 (с SVN: внешнеположенности базировать, Feature3, ...)

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

+0

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

+0

Спасибо за этот отзыв. Возможно, это сработает. Im в настоящее время находится в процессе рефакторинга кода, чтобы разбить его на основные библиотеки и специфические для телефона. Попробуем это после этого. – Prashast

+0

Приветствую вас, ребята, я не был уверен в том, насколько вы изощренны; Если каждый телефон имеет определенный набор функций, и вы вручную объявляете их в коде, тогда svn: externals должны работать нормально самостоятельно, но если вы хотите создать автоматизированный процесс сборки для каждого телефона, то есть не нужно объявлять (в коде) каждую функцию , тогда вам все равно придется искать некоторые задачи сборки для совместной работы с svn: externals. например Вы просто определяете функции во внешнем виде, а скрипт сборки разрабатывает, что включать/link/компилировать. – si618

1

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

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

My Book: Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

0

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

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

0

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

depot/ 
    common/ 
    platform1/ 
    someportedfile 
    platform2/ 
    someportedfile 

и он отображается в рабочей области, чтобы:

platform1/ 
    someportedfile 
    common/ 
platform2/ 
    somtportedfile 
    common/ 
1

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

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

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

+0

+1 за подсказку, как избежать разветвления –

+0

Я не понимаю? Что случилось с svn: externals? Мы используем его довольно успешно! – si618

Смежные вопросы