Я использовал git для управления кодовыми знаками оборудования / программного обеспечения, поэтому могу дать несколько полезных советов.
Как правило, если у вас есть части проекта, которые могут взаимодействовать друг с другом независимо от редакции, над которой вы работаете, лучше создать для них отдельные репозитории git.
Чтобы привести пример, вы хотите, чтобы ваш драйвер находился в отдельном хранилище от вашего аппаратного обеспечения. Это связано с тем, что интерфейс между программным и аппаратным обеспечением очень четкий и представляет собой естественный шов для разложения. Кроме того, одна и та же версия драйвера будет применяться к ряду этапов проектирования вашего устройства.
Я не уверен, что вы подразумеваете под производственными и производственными выпусками дизайна. Если вы хотите отделить разрабатываемую и стабильную версии, у вас должно быть хорошо иметь отдельные ветки для них.
Ветвление и слияние в git настолько дешевы, насколько вы можете себе позволить, а переключение между ветвями происходит молниеносно; так что нет штрафов за наличие веток. Также довольно легко подобрать совместимые изменения между ветвями. Подход, который вы обычно видите в мире программного обеспечения (ветки для выпусков плюс один HEAD), работает довольно хорошо.
Вы, вероятно, должны хранить демонстрационные / тестовые модули (мигалки и т. Д.) Вместе с модулями, которые они должны демо / тестировать. Это потому, что интерфейсы демонстрационной связи часто подвержены изменениям. Таким образом, вы должны будете синхронизировать демонстрационный код с реальными устройствами, что должно способствовать стабильности проекта в долгосрочной перспективе.
Как примечание: в мире FPGA вы обычно создаете прототипы на большом устройстве и производите его на ограниченном устройстве. Таким образом, ваши модули получат две разновидности, которые разрабатываются независимо. Возможно, вы захотите хранить эти разновидности в отдельных репозиториях, потому что они, по сути, разные сущности. В этом случае код, который разделяется между ними (всегда есть некоторый переносимый код, который вы можете использовать повторно), может находиться в отдельном репо и представлять собой отдельную библиотеку. Особенно, если размер кода оправдывает это.
Затем вы можете связать все упомянутые модули вместе, используя подмодули git.