Подмодуль git всегда отключен, даже при отслеживании ветки - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть подмодуль git, настроенный для отслеживания определенной ветви:

[submodule "subproject"]
path = subproject
url = ../subproject.git
branch = v2.44

В моем скрипте сборки я хочу иметь возможность запрашивать ветку подпроекта, поэтому я использую cd subproject && git rev-parse --abbrev-ref HEAD.Я ожидал бы, что это выведет v2.44, но всегда выдает HEAD.

Когда я вхожу в subproject/ и проверяю ветвь, я получаю:

git branch -v
* (HEAD detached at b69ac07) b69ac07 Another commit
  master                     36096e7 Some commit

Что происходитЗдесь?Почему я должен быть отсоединен, а не от ветви v2.44?

Если я вручную git checkout v2.44, родительский репозиторий git также не обнаружит каких-либо изменений в подмодуле, в отличие от того, что было бы git checkout v2.43 и затем он замечает, что подмодуль был изменен.

1 Ответ

0 голосов
/ 21 декабря 2018

Это нормально!

Обозначение ответвления в объявлении подмодуля используется только тогда, когда обновляет подмодуль, через git submodule update --rebase или git submodule update --merge, илинесколько других особых странных случаев.Во всех других случаях каждый подмодуль имеет отдельный HEAD, отсоединенный при фиксации, выбранной с помощью записи индекса gitlink в суперпроекте, использующем подмодуль.

(то есть в суперпроект , некоторый коммит C извлечен. Коммит C говорит: Когда вы используете подмодуль S, он должен быть на коммите CS. Этоэта вещь называется gitlink , и она копируется из коммита C в индекс, а затем git submodule update переходит в подмодуль и извлекает этот конкретный коммит в виде отдельного HEAD.)

...