Git субмодули на мастере - PullRequest
       3

Git субмодули на мастере

7 голосов
/ 15 января 2011

Я новичок в подмодулях git и заметил, что они всегда ссылаются на конкретные коммиты.

Есть ли способ для субмодулей суперпроекта всегда ссылаться на заголовок ветки master, поэтому «обновление git submodule» или «git pull» в суперпроекте просто «git pull» для всех подмодулей.

Спасибо.

Ответы [ 2 ]

11 голосов
/ 15 января 2011

Короткий ответ - нет. Идея заключается в том, что вы точно знаете, что определенный коммит подмодуля будет работать с вашим проектом, и вы не хотите, чтобы какое-либо неопределенное или неожиданное поведение появлялось при получении оперативных обновлений. Подмодуль непосредственно представлен двумя вещами: записью в .gitmodules и gitlink, которая является ссылкой на SHA1 желаемой фиксации подмодуля. SHA1, а не refname.

То, что вы спрашиваете, действительно для суперпроекта, чтобы не представлял что находится в подмодуле. Подумайте об этом: разные клоны вашего проекта могли обновлять подмодуль в разное время, и в результате в нем появлялись разные его версии, а затем, если в вашем проекте были сделаны коммиты, им пришлось бы записывать разные коммиты в подмодуле. Когда вы объединитесь, вам придется просто игнорировать то, что они оба говорят, и снова тянуть, вероятно. В результате ваш запрос избегает самой идеи субмодулей: узнать, что у вас есть. Если вы говорите, что используете «мастер», вы вернетесь через два месяца и понятия не имеете, что это значит!

Если вы хотите всегда получать текущую ветку master, вам лучше сделать это самостоятельно. Напишите скрипт для извлечения всех подмодулей и запускайте его время от времени, фиксируя обновленные версии. (Сначала проверьте!) Суть в том, что с субмодулями для каждого коммита суперпроекта вы должны точно знать, какую версию подпроекта вы используете. Вы сами выбираете, как часто вы хотите обновить версию субмодуля; это может быть ежедневно, если хотите.

Альтернативой может быть добавление каталога (ов) для подмодуля (ов) к вашему gitignore и создание небольшого быстрого скрипта для их обновления (и, вероятно, одного для клонирования их тоже). Это стоило бы вам возможности узнать, какая версия у вас была в какой-то момент в прошлом.

10 голосов
/ 15 января 2011

Update 2013, так как git 1.8.2, подмодуль может следовать за веткой (а не просто ссылаться на фиксированный коммит)

См. " git submodule tracking ".


(Оригинальный ответ, январь 2011 г.)

Это одно из различий между подмодулями git и (например) svn:externals.

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

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

...