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

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

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

Благодарю.

 VonC25 июл. 2013 г., 07:45
Подмодуль теперь может следовать за веткой (git1.8.2 +). Видетьмой отредактированный ответ ниже
 Cascabel15 янв. 2011 г., 18:38
@Saher: Это очень специфический вопрос, а не просто общий вопрос "Я новичок в мерзавцах".
 Saher Ahwal15 янв. 2011 г., 18:28
gitref.org страница Git Reference - хороший способ начать, если вы новичок в git.
 sinelaw15 янв. 2011 г., 18:39
Я думаю, что ответ - нет. Git хранит имя коммита, когда записывает информацию о подмодуле, и в моем случае я написал набор скриптов для извлечения, добавления, фиксации и push, что делает именно то, что я хочу сделать с подмодулями.

Ответы на вопрос(2)

подмодуль может следовать за веткой (а не просто ссылка на фиксированный коммит)

Видеть "git submodule для отслеживания последних».

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

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

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

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

Решение Вопроса

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

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

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

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

 VonC15 янв. 2011 г., 18:43
Удачно поставить, как всегда. +1
 Sam25 янв. 2011 г., 11:57
Спасибо очень ясно - время, чтобы получить навыки написания сценариев ..
 Onur10 мар. 2014 г., 17:20
@Jefromi: Может быть, вы могли бы обновить свой ответ, так как теперь это возможно в git? Смотрите ответ VonC.

Ваш ответ на вопрос