Для контроля версий мы в настоящее время используем Visual Source Safe и планируем перейти на другую систему контроля версий (SVN, Mercurial, Git).
В настоящее время мы довольно активно используем функцию общего файла в Visual Source Safe. Это позволяет нам обмениваться кодом между дизайном и временем выполнения одного продукта, а также между несколькими продуктами.
Например:
**Product One**
- Design
Login.cpp
Login.h
Helper.cpp
Helper.h
- Runtime
Login.cpp
Login.h
Helper.cpp
Helper.h
**Product Two**
- Design
Login.cpp
Login.h
- Launcher
Login.cpp
Login.h
- Runtime
Login.cpp
Login.h
В этом примере Login.cpp и Login.h содержат общий код, который нужен всем нашим проектам, Helper.cpp и Helper.h используются только в Product One. В Visual Source Safe они разделяются между конкретными проектами, что означает, что всякий раз, когда файлы обновляются в одном проекте, они обновляются в любом проекте, с которым они совместно используются.
Это простой пример, но, надеюсь, он объясняет, почему мы используем общую функцию: чтобы уменьшить объем дублирующегося кода и обеспечить, чтобы при устранении ошибки все проекты автоматически имели доступ к новому фиксированному коду.
После исследования альтернатив Visual Source Safe кажется, что большинство систем контроля версий не имеют представления об общих файлах, вместо этого они, похоже, используют идею вложенных репозиториев. (https://www.mercurial -scm.org / wiki / subrepos http://svnbook.red -bean.com / ru / 1.0 / ch07s03.html )
Мой вопрос (после всего этого) о том, какие наилучшие практики для достижения этого используют другие системы контроля версий?
Должны ли мы реструктурировать наши проекты, чтобы две копии файлов не существовали, а вместо них использовался каталог include? например,
Product One
- Дизайн
Login.cpp
Login.h
- время выполнения
Login.cpp
Login.h
- Общие
Helper.cpp
Helper.h
Это все еще оставляет, что делать с Login.cpp и Logon.h
Должны ли общие файлы быть перемещены в их собственный репозиторий и затем скомпилированы в lib или dll? Это сделает исправление ошибок более трудоемким, поскольку проекты lib придется редактировать и затем перестраивать.
Должны ли мы использовать внешние или вспомогательные репозитории?
Должны ли мы объединить наши проекты (т.е. время выполнения, дизайн и модуль запуска) в один большой проект?
Любая помощь будет принята с благодарностью. У нас есть ощущение, что дизайн нашего проекта развивался на основе инструментов, которые мы использовали, и теперь, когда мы думаем о переключении инструментов, нам трудно понять, как мы можем наилучшим образом изменить нашу практику.
Или, может быть, мы единственные люди, которые делают это ...?
Кроме того, мы используем Visual Studio для всех наших вещей.
Спасибо.