как именно работает подмодуль git

на .gitmodule file указывает только url репозитория модуля. Как это git submodule знаете, какую версию скачать? Кажется, он всегда проверяет последнюю версию. Затем, как разработчики обеспечивают совместимость между основным проектом и подмодулями?

1 ответов


ваш подмодуль представлен как специальная запись со специальным режимом (называется gitlink в разделе "вложенные репозитории git без подмодулей?"):
(См.--15-->проверка мимо подмодуля git commit")

new file mode 160000
index 0000000..4c4c5a2

поэтому он не проверяет "последнюю" версию, но всегда определенный SHA1, и он делает это в отдельно стоящее HEAD режим (см. "как сделать подмодуль с отсоединенным HEAD to прикрепитесь к фактическому HEAD?".

это не означает, что вы не можете обновить подмодуль, как я объясняю в "истинная природа подмодулей".

подробнее о подмодулях и о том, почему вы могли бы не хочу использовать их(!), читайте отрезвляющую статью"почему ваша компания не должна использовать подмодули Git", from Янтарь Юст (кроме так).

как раз одна небольшая выдержка, для Пинки и хихиканье (акцент мой):

при вызове git submodule update он ищет в Родительском репозитории SHA для каждого подмодуля, входит в эти подмодули и проверяет соответствующие SHAs.
Как и в случае, если вы проверили SHA в обычном репозитории, это помещает подмодуль в отдельное головное состояние.

если вы затем внесете изменения в подмодуль и зафиксируете тогда, Git с радостью создаст фиксацию... и оставит вас все еще с отделенная голова. Видишь, к чему все идет?

скажем, вы объединяете еще несколько изменений, которые включают в себя другое обновление подмодуля. Если вы еще не совершили собственное изменение подмодуля в родительский проект, Git не будет рассматривать вашу новую фиксацию в подмодуле как конфликт, и если вы запустите git submodule update он с радостью уничтожит вашу фиксацию без предупреждения, заменив ее на ветку, которую вы только что объединили в.

Я надеюсь, что у вас был ваш субмодуль х reflog включено или все еще имеет старую фиксацию в прокрутке терминала,потому что в противном случае, вы просто потеряли все, что вы сделали.

Err... "ой."


обратите внимание, что теперь подмодуль может отслеживать последние из ветки: см."git подмодуль отслеживания последние".