Обновление подмодуля git игнорирует .gitmodules - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть git-репо с подмодулем.Содержимое файла .gitmodule для основного репозитория:

[submodule "wits-mercuryAPI"]
    path = wits-mercuryAPI
    url = https://github.com/myorganization/wits-mercuryAPI.git

Я ожидаю, что при выполнении команды ...

обновление подмодуля git

... было бы правильно клонировать субмодуль из местоположения, указанного в URL-адресе файла .gitmodule.Тем не менее, он, очевидно, пытается использовать более старую версию этого файла, где URL-адрес указывает на неправильный URL-адрес, и поэтому терпит неудачу.

Для жизни я не могу понять, почему он ведет себя так или чтоВолшебное скрытое свойство сообщает этой команде доступ к некоторой более старой и невидимой версии файла .gitmodules.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Хорошо, я понял это.Хотя я не упомянул об этом, потому что не считал это уместным, «репо» (назовем его «B»), которое я описал в своей собственной очереди, само по себе было подмодулем еще одного родительского репозитория более высокого уровня (давайте назовем это «А»).Наконец, давайте назовем подмодуль, описанный в оригинальном вопросе «C».Таким образом, зависимость A-> B-> C.

Вот что произошло: 1. Я обновил .gitmodules в B, чтобы указать новый и правильный URL-адрес для C, и отправил изменения в master.2. Я неправильно предположил, что A автоматически получит это изменение, если я это сделаю: `git clone --recurse.3. Вместо этого A «запоминает» версию B, на которую он указывал, возвращает эту версию субмодуля с неверным URL-адресом в C

Исправление было здесь: https://gist.github.com/ryannealmes/aa4eed8b222239c9e207

0 голосов
/ 20 сентября 2018

Содержимое файла .gitmodules используется только при первом создании Git-репозитория подмодуля.Если хранилище подмодулей уже существует, Git просто продолжает использовать существующий клон.

В зависимости от используемой вами конкретной версии Git, хранилище подмодулей может находиться в каталоге .git суперпроекта, в .git/modules/ или (более старые версии Git) в пути самого подмодуля.Однако в любом случае, если URL подмодуля изменился, у вас есть два варианта:

  • полностью удалить подмодуль (включая запись для него .git/modules) и повторно инициализировать;или
  • введите подмодуль (достаточно ввести путь) и используйте git config, чтобы обновить этот конкретный клон, например, git config remote.origin.url <new-url> или git config --edit, чтобы открыть редактор конфигурации.
...