Перейти к содержимому

core.git

← Каталог модулей

soul-sidesoulstack.scmscm

Клонирование и обновление git-репозитория на хосте через системный git.

core.git вызывает системный git как подпроцесс (clone / pull --ff-only / rev-parse); собственного git-клиента модуль не содержит. Идемпотентность — по наличию path/.git: cloned клонирует только при отсутствии, pulled дополнительно подтягивает remote и рапортует changed лишь при сдвиге HEAD. clone/pull исполняют код из репозитория (хуки, transport), поэтому repo обязан указывать на доверенный источник. MVP сознательно не покрывает смену remote URL, submodule, lfs и sparse-checkout.

Требования

  • Rootне требуется
  • Сторонаsoul-side
  • Коллекцияsoulstack.scm
  • Категорияscm
Capabilitiesexec_subprocessnetwork_outbound

Состояния

core.git.cloned — По пути path лежит git-репо (клонируется при отсутствии).

Меняется, когда

path/.git отсутствовал и репозиторий склонирован.

Не меняется, когда

path/.git уже есть — содержимое не трогается, новый pull не выполняется.

Параметры

ПараметрТипОбяз. / дефолтОписание
repostringrequiredURL репозитория.
pathstringrequiredЦелевой каталог клона.
branchstringoptionalВетка (default main).
depthintoptionalГлубина shallow-клона (--depth).

Пример — Выложить репозиторий на хост (shallow-клон)

- name: Clone deploy repo
module: core.git.cloned
params:
repo: https://github.com/example/deploy.git
path: /opt/deploy
branch: main
depth: 1

Output

ПолеТипОписание
pathstring
clonedtrue
headstring (текущий HEAD, sha, best-effort)

Заметки

  • Требует исходящей сети (network_outbound): clone/pull ходят на remote repo.
  • pull — только fast-forward (--ff-only): расходящаяся локальная история не мёржится силой, шаг падает — защита от тихой потери локальных коммитов на хосте.
  • Аутентификация и transport (ssh-agent, credential helper, ~/.netrc) — на стороне системного git; модуль их не настраивает.
  • head в output — best-effort: если rev-parse не отдал sha, поле пустое (на основной flow это не влияет).

Безопасность и умолчания

  • clone/pull исполняют код из репозитория — главный риск модуля: git при checkout прогоняет хуки репо (.git/hooks/*: post-checkout, post-merge), а transport-параметры могут запустить произвольную команду. Модуль не отключает хуки и не песочит git.
  • repo обязан указывать на доверенный источник: клонирование недоверенного репозитория = исполнение кода его автора с привилегиями процесса soul; на практике для системных путей агент под root, тогда хуки исполнятся под root — цена доверия к repo только растёт.
  • Argument-injection guard -- прикрывает repo/path (репо, начинающийся с -, не распарсится git как опция), но branch подставляется до -- и без валидации — держите branch под контролем автора Destiny, как и repo.

См. также