... Мне было интересно, может ли быть способ избежать зацикливания этих ранее указанных подмодулей.
Нет, это не так.Но git submodule foreach
запускает произвольную команду оболочки , с некоторыми экспортированными переменными, как описано в документации :
foreach [--recursive]
Оценивает произвольную команду оболочки в каждом извлеченном подмодуле.Команда имеет доступ к переменным $name
, $sm_path
, $displaypath
, $sha1
и $toplevel
: $name
- это название соответствующего раздела подмодуля в .gitmodules
, $sm_path
- это путь кподмодуль, записанный в непосредственном суперпроекте, $displaypath
содержит относительный путь от текущего рабочего каталога до корневого каталога подмодуля, $sha1
- это фиксация, записанная в непосредственном суперпроекте, а $toplevel
- абсолютный путь кверхний уровень непосредственного суперпроекта.Обратите внимание, что во избежание конфликтов с $PATH
в Windows переменная $path
теперь является устаревшим синонимом переменной $sm_path
....
(Я внес несколько небольших изменений в директиву форматирования, но текст должен совпадать, более или менее. Ваша версия Git может иметь более старое $path
имя, чем $sm_path
,в зависимости от возраста вашего Git. Проверьте документацию вашего Git, чтобы быть уверенным: git help submodule
распечатает вышеперечисленное, как часть полной документации.)
Поскольку у вас есть доступ квся эта информация используется .Выберите тот, который проще всего проверить в вашей ситуации, и пропустите выполнение неприменимых команд.Не просто слепо беги git <em>foo</em>
;используйте if somecondition; then git <em>foo</em>; fi
или аналогичный.