Я работаю со старым кодом, который использует подмодули Git. В коде есть несколько расходящихся ветвей, которые активно используются, и каждая из этих ветвей зависит, к сожалению, от разных версий соответствующих подмодулей; это сделало разработку чрезвычайно сложной . Одна из проблем, с которой я сталкиваюсь, заключается в том, что, когда я переключаюсь между ветвями, например, с. От master
до newfeature-foo
при использовании git checkout newfeature-foo
состояние подмодулей остается на уровне master
, что часто приводит к ошибкам компиляции, и, что еще хуже, может вызывать различия в поведении во время выполнения, что наносит ущерб пользовательскому тестированию и общему здравомыслию.
Например, для конфигурации .gitmodules
:
[submodule "robotcontroller"]
path = robotcontroller
url = https://coolrobots.com/repos/robotcontroller
branch = master
ignore = dirty
- ветвь
master
при коммите 77d4697 имеет ссылку на robotcontroller @ f57d1b3
- ветвь
newfeature-foo
в b38d29f имеет ссылку на robotcontroller @ 60b27d4
- ветвь
master
в 873639f вообще не имеет подмодуля robotcontroller
- ветвь
newfeature-foo
в 301dca4 имеет ссылку на robotcontroller @ bdf5991
Нет ли способа, например использование перехватчиков Git для принудительной автоматической полной повторной проверки всех подмодулей, перечисленных в файле .gitmodules
, когда он изменяется при извлечении из «корневого» репозитория Git?