Git допускает "голые" подмодули?
Это может быть ужасно, я не уверен.
Допустим, у нас есть репо "продукт" с рабочим каталогом
/product
/product/command.script
/product/config/ (bare git repo)
И репо "конфиг" с рабочим каталогом
/config
/config/config.json
Файл command.script имеет действия для взаимодействия с голым репозиторием. ех. Запуск command.script BRANCH1 запустит команду
git show BRANCH1:config.json
Есть ли способ, что папка "/product/config /" может быть подмодулем репо "product", так что при клонировании репо "product" репо "config" также будет клонировано
git clone --bare [config origin here] config
от его источника и когда выбирается репо "product", может быть выбран субмодуль "/product/config"
git fetch origin '*:*'
Или это то, что должно быть обработано через какие-то крючки?
1 ответ
Нет: когда "продукт" репо выбирается, его индекс будет включать gitlink (специальная запись, записывающая SHA1 субмодуля).
Эта запись может использоваться только в репо без обнажения, чтобы использоваться как вложенное (подмодульное) репо.
Вот почему git clone
страница руководства упоминает:
--recursive
--recurse-submodules
После создания клона инициализируйте все подмодули внутри, используя их настройки по умолчанию. Это эквивалентно бегу
git submodule update --init --recursive
сразу после того, как клон закончен.
Эта опция игнорируется, если клонированный репозиторий не имеет рабочего дерева / извлечения (т. Е. Если какой-либо из--no-checkout/-n
,--bare
, или же--mirror
дано)
Это означает, что это лучше для config
репо должен быть клонирован отдельно (даже голым) на правом SHA1 (тот, который записан gitlink в первом product
репо), а для git show BRANCH1:config.json
быть исполненным в этом другом клонированном репо ( с git -C
).