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).

Другие вопросы по тегам