Git обновляет субмодуль с неисследованной веткой - PullRequest
7 голосов
/ 11 августа 2011

Я использовал git довольно долго, но держался подальше от подмодулей, так как у меня не было веской причины использовать их. Однако недавно я начал проект, который явно должен использовать эту функцию git.

Однако каждый раз, когда я клонирую весь проект, подмодуль заканчивается в ветке без имени. Вот команды, которые я выполняю:

git clone <url to project>
git submodule update --init <submodule>
cd <submodule>; git branch

и распечатывает:

* (no branch)
  master

Мне нужно сделать еще

git checkout master

Теперь мой вопрос: это стандартное поведение? Если нет, можете ли вы помочь мне понять, что я делаю неправильно?

Спасибо

1 Ответ

5 голосов
/ 11 августа 2011

В отличие от некоторых других SCM, коммиты в Git по своей природе не принадлежат какой-либо конкретной ветви.Голова ветки похожа на закладку для коммита.Когда вы извлекли ветку (т. Е. Файл .git/HEAD содержит ссылку на ветку), и вы делаете коммит, Git перемещает эту закладку вперед, чтобы указать на новый коммит.здесь не применяетсяКак вы, возможно, уже знаете, подмодуль закреплен за конкретным коммитом;он не отслеживает голову филиала.Когда вы обновляете подмодуль, Git проверяет только этот конкретный коммит .Это означает, что .git/HEAD содержит хеш коммита, а не ссылку на ветвь.

Может быть одна или несколько глав веток, указывающих на этот коммит, но это не имеет значения* Только когда HEAD содержит ссылку на ветку, а не хеш коммита, git branch покажет, что вы находитесь на ветке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...