Настройка хранилища Perforce для нескольких проектов - PullRequest
0 голосов
/ 28 августа 2011

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

Подробности: Дотеперь у меня есть депо, в котором был только один проект - ProjectA - версия робота A.

Я начинаю работать над новой версией (ProjectB), которая имеет некоторые различия в HW - порт ввода-выводаотображения и таймеры изменились.Я хотел бы продолжить разработку кода для обоих проектов.

Это означает, что ProjectB поделится некоторыми файлами с ProjectA, а некоторые файлы будут другими.

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

Различия настолько велики, что я не хочу делать #ifdef внутри файлов.Некоторые различия просты - различное сопоставление портов ввода / вывода, а некоторые - совершенно новые модули.

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

Наконец, чтобы минимизировать мое бремя во время сравнений, я хотел бы отметить различия, которые, как я знаю, допустимы, чтобы в будущих сравнениях они не отображались.

Справка!

1 Ответ

1 голос
/ 28 августа 2011

Ваши инстинкты хороши - вы пытаетесь не дублировать код. Это основа хорошего дизайна и инжиниринга.

Что касается макета файла, всегда раздражает, что ваши каталоги слишком глубокие, но это НАМНОГО лучше, чем слишком поверхностное. Может быть:

<root>
  main/
    projects/
       robot1/...
       robot2/...
       shared1/
       shared2/

(Большие хранилища гораздо глубже, чем это.)

Что касается того, как вы создаете общий код - у вас может быть другой setup.h или constants.h, который управляет тем, что делают различные общие библиотеки. Кроме того, создайте свои общие библиотеки, чтобы они были параметризованы во время выполнения.

SetupDrivers(0x80020); // address of PIO registers

И, наконец, - если проекты действительно отличаются, решите, действительно ли совместное использование кода является правильным. Обычно да, но все есть выбор. Если вы надеетесь вручную «разграничить» ваши файлы, чтобы найти различия, вам действительно нужно сохранять структуры достаточно близкими для различий. Упомянутая выше идея «разные config.h файлы для каждого проекта» поможет.

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

...