До сегодняшнего дня я размещал свой репозиторий git и его репозиторий подмодулей на github. И папка подмодуля во всех коммитах в суперпозитории перенаправляется на правильные коммиты в репозитории подмодулей.
Теперь мне нужно перенести репозиторий подмодулей из github в bitbucket и удалить репозиторий подмодулей в github. Будет ли это действие нарушать мои коммиты в суперпозитории? Разве суперпозитории не хранят информацию об URL-адресе подмодуля в своих коммитах?
Пример сценария:
Допустим, есть коммит c67061d7710e699a191965a02d9d0da341d87117
в подмодуле, который упоминается в суперпозитории во многих коммитах. Я хочу изменить ссылку на этот коммит с
githubserver/tree/c67061d7710e699a191965a02d9d0da341d87117
к
bitbucketserver/tree/c67061d7710e699a191965a02d9d0da341d87117
во всех коммитах в супер-репозитории, содержащих ссылку на c67061d7710e699a191965a02d9d0da341d87117
Я читал о том, как обновить URL-адрес подмодуля в других вопросах о стеке здесь. Но они четко не упоминают, изменяет ли это обновление URL ссылки во всех коммитах или только в коммитах, следующих за таким действием.
Хорошей новостью является то, что в конечном итоге это будет работать нормально, потому что вы переместите всю свою историю из github в битбакет и соответствующим образом обновите файл .gitmodules
. Как только вы это сделаете, новые кассы и git submodule init
будут работать нормально.
Плохая новость заключается в том, что существующие кассы будут продолжать использовать старый удаленный URL-адрес, поэтому git submodule update
начнет давать сбой. Чтобы исправить это, вам нужно будет сказать всем, кто проверял ваш репозиторий, запустить git submodule sync
, чтобы обновить пульты подмодулей до bitbucket.
Нет, вам нужно запустить git submodule sync
для обновления пультов уже инициализированных подмодулей.
Модификация .gitmodules
, за которой следует git submodule sync
, изменит URL-адрес подмодуля всех предыдущих коммитов локально. Но как сделать это изменение доступным в удаленном репозитории, чтобы другие могли получить это изменение в своих локальных репозиториях?
Вы должны зафиксировать свой новый файл .gitmodules
. Затем скажите людям использовать git remote set-url
в новом основном репозитории. Затем попросите их запустить git pull
, а затем git submodule sync
.
поэтому фиксация изменений в файле .gitmodules
и его отправка - это все, что необходимо для удаленного репозитория, чтобы узнать местонахождение нового URL-адреса субмодуля, не будет ли это означать, что старые коммиты со старым файлом .gitmodules
сообщат удаленному репозиторию о том, что указать на старый URL-адрес подмодуля в этих коммитах, и они ломаются, тем самым?
Вот почему git submodule sync
нужно запускать вручную. Если вы проверите систему и соответствующим образом запустите git submodule init
и / или git module sync
с текущей версией .gitmodules
, то ваши пульты управления субмодулями будут установлены на новое место (битовый пакет). Затем, если вы проверяете старую версию, файл .gitmodules
будет указывать не на то место, но пульты модулей по-прежнему будут правильными.
поэтому я меняю файлы
.gitmodules
иgit submodule init
. Изменит ли это URL-адрес подмодуля всех предыдущих коммитов локально?