Это действительно неправильное понимание того, как работают подмодули, а не проблема с символическими ссылками. Я настоятельно рекомендую прочитать главу Субмодули в Pro Git.
Для целей этого объяснения давайте определим несколько терминов:
-
A
будет хранилищем, содержащим цель вашей символической ссылки (сама ссылка). B
будет хранилищем, содержащим источник этой символической ссылки. C
будет подмодуль в A
ссылается на B
.
Итак, вы сделали git submodule add B
из A
, создав C
, а затем сделали что-то вроде ln -s B/file file
, так что вы получили символическая ссылка в A
, называемая file
, указывающая на file
в пределах C
. Все работает.
Проблема, как описано, заключается в том, что вы затем обновляете file
в B
и pu sh, которые меняются, однако в A
символическая ссылка по-прежнему показывает исходное содержимое file
. Проблема в том, что C
является просто клоном B
: Как и любой другой клон репозитория, содержимое на диске не изменяется при изменении того, из чего они были клонированы (например, если вы клонируете репозиторий из github, а затем кто-то обновляет, что репозитории на github файлы на вашем локальном компьютере не изменяются). Решение состоит в том, чтобы обновить C
и A
: Go до C
, вытянуть нужные изменения из B
, затем go в A
и зафиксировать изменение в подмодуле.
Некоторые люди считают этот процесс довольно тяжелым. Если это так, то в другом ответе, на который вы ссылались, есть ряд других способов сделать то, что вы хотите sh с помощью сценариев (или вы можете даже написать сценарий процесса обновления субмодуля, если хотите).