Субмодули - это не то, что работает особенно гладко, как вы намерены здесь. Как вы, наверное, заметили, чтобы зафиксировать изменение в проекте в подмодуле (начиная с Git v1.7, вероятно, навсегда), вам необходимо:
- Внесите изменения в подмодуль.
- Зафиксируйте подмодуль, получив новый хэш SHA.
- Обновите файл .gitmodules внешнего проекта с новым хешем.
- Обязательство по внешнему проекту.
Это громоздко, если вы разрабатываете подмодуль и внешний проект (ы) в режиме lockstep. Это «правильный путь», поскольку предпочтение стабильных конфигураций программного обеспечения простоте при смешивании кодовых баз, но последовательность команд в этом случае патологически длинна.
Тем не менее, появление стека «почему», разработка с использованием подмодулей *, возможно, указывает на одну из нескольких более крупных проблем:
- У вас нет четкого интерфейса между вашим подкомпонентом, и детали реализации просачиваются через границы.
- У вас нет продуманного интерфейса к вашему подкомпоненту, поэтому вам придется заново изобретать вещи, когда вы решаете более интересную проблему.
- Ваш интерфейс стабильный и высококачественный, но у вас нет хорошего процесса контроля качества кода подмодуля, поэтому вместо этого вы постоянно исправляете это, пытаясь выполнить другую работу.
- (Особенно, если A и B продолжают менять разные вещи) Ваш "общий" код на самом деле намного меньше, чем вы думаете, или должен быть разделен по-разному.
Ни один из этих случаев обязательно не относится к вам, но они относятся к числу проблем, которые вызывают ужасный рабочий процесс обновления субмодуля lockstep. Подмодули работают очень хорошо, когда вы можете почти полагаться на разделяемые библиотеки и заголовочные файлы, но есть несколько веских причин (например, странные флаги компиляции, которые должны быть согласованными) для компиляции из исходного кода. Мой подход заключается в том, чтобы исправить эти проблемы, если они действительно являются основными причинами.
Однако, если этих проблем нет, может быть, мерзавец - не тот инструмент для вас. Мне больно это говорить, но это определенно возможно.