Как сделать субмодуль с отсоединенной головкой для привязки к реальной головке? - PullRequest
25 голосов
/ 27 декабря 2011

Когда я добавляю подмодуль Git в репозиторий Git следующим образом,

git submodule add ssh://server/proj1/ proj1
git submodule init
git submodule update

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

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

cd proj1
git checkout master

Это переключит текущую ветвь фактического главного HEAD, но это не обновит связь. Поэтому, если вы снова клонируете весь репозиторий, он все равно будет связан со старой ревизией.

Если я хочу, чтобы он всегда был связан с самой последней ревизией (HEAD), что мне делать?

1 Ответ

35 голосов
/ 27 декабря 2011

Обновление март 2013

Git 1.8.2 добавлена ​​возможность отслеживать ветки.

"git submodule" начал изучать новый режим для интеграции с кончиком удаленной ветви (в отличие от интеграции с фиксацией, записанной в gitlink суперпроекта).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

См. Также учебник Фогеллы по подмодулям .


Оригинальный ответ (декабрь 2011 г.)

добавленный субмодуль будет находиться в режиме отсоединенного заголовка

Да, подмодуль - это ссылка на конкретный коммит, а не ветвь.
Итак:

  • Если вы извлекаете коммит SHA1 (или тэг), вы находитесь в автономном режиме HEAD.
  • Если вы извлекаете ветку (как вы делали с веткой master подмодуля), вы можете создать другие коммиты поверх этой ветки (но вам придется вернуться к родительскому репо, чтобы зафиксировать указанного родителя также вам нужно записать новый коммит субмодуля, который вы создали)

Подробнее см. Подлинные субмодули .

Если вы всегда хотели получить последний коммит другого репо, самый простой способ - объединить их вместе (например, слиянием поддерева).
Подробности см. В « Merge 2-же хранилище GIT ».

...