Git обновление новой версии подмодуля

Я разблокировал MapBox-ios-sdk и внес некоторые изменения в него. Более новая версия sdk находится здесь, и я объединил свои изменения в свою вилку. MapBox-ios-sdk также включает SMCalloutView, который является подмодулем в MapBox-ios-sdk. Однако версия официального sdk использует более новый, обновленный SMCalloutView, который не находится в моей вилке.

Как мне его обновить

Я обновляю свой sdk с инструкциями здесь. Однако это не обновляет SMCalloutView. Я также пробовал git submodule update --recursive на уровне MapBox-ios-sdk, и ничего не происходит. Как выясняется, потому что SMCallOutView находится в "никакой ветке" . Почему это на "никакой ветке" ? Как я могу вывести весь субмодуль из состояния "нет ветки"? Если он в "никакой ветке" , я никогда не узнаю, какой подмодуль или подмодуль подмодуля (или даже больше вложенного) нуждается в обновлении.

Ответ 1

С git 1.8.2+ (март 2013 г.) вы можете определить подмодуль, который будет отражать последнюю фиксацию данного филиал.
См. "git отслеживание подмодуля последних.

Это означает, что этого достаточно, чтобы обновить подмодуль до последней ветки:

# --remote will also fetch and ensure that
# the latest commit from the branch is used
git submodule update --remote

Подробнее о --remote см. git repo commit 06b1ab.


Повторить:

  • Для нового подмодуля (который должен следовать за веткой):

    git submodule add -b [branch] [URL] [DirectoryName]
    
  • Для существующего подмодуля, который вы теперь хотите, чтобы он соответствовал ветке:
    См. Также git repo commit b92892, для преобразования подмодуля git в один, который следует за веткой.
    Все, что вам нужно сделать, это:

    git config -f .gitmodules submodule.<path>.branch <branch>
    

    Подробнее в разделе git подмодулей: укажите ветку/тег"