Стратегия checkout — тихий множитель за каждым macOS-пайплайном: тот же Mac mini M4 с git worktree может казаться «достаточно быстрым», а при утечке DerivedData между задачами — «загадочно нестабильным». В 2026 году команды с явной политикой worktree против чистого клона сокращают время очереди и аудиторский риск. Руководство даёт две матрицы, числовые дисковые бюджеты, восемь шагов внедрения и структурированные FAQ для внутренних runbook.
Сочетайте политику с удержанием диска и артефактов, оболочками ёмкости и правилами аффинити раннеров. Для дополнительных выделенных хостов в Гонконге, Японии, Корее, Сингапуре или США начните с цен и держите открытой помощь по схемам SSH/VNC.
Почему режим checkout — это задача планирования, а не только Git-мелочи
Self-hosted macOS-раннеры по умолчанию stateful: глобальные кэши, элементы связки ключей на уровне пользователя и стандартный путь Xcode DerivedData переживают задачи, если их не изолировать. Чистый клон на задачу изолирует объекты Git, но не компиляторы автоматически. Worktree делят одну базу объектов — быстро — но усиливают ошибки в скриптах очистки. Относите режим checkout к истории радиуса поражения наряду с секретами и подписывающими личностями.
- Worktree минимизируют байты
git fetch, когда много веток строят один поток ревизий. - Чистые клоны максимизируют изоляцию, если post-checkout хуки меняют инструменты вне дерева.
- Гибридные схемы (тёплое bare-зеркало + эфемерные worktree) распространены в масштабе, но требуют жёстких соглашений о путях.
Матрица решений A: worktree, чистый клон или гибрид
| Сигнал репозитория | Рекомендуемый режим | На что смотреть |
|---|---|---|
| Монорепо, высокий churn, общая версия Xcode | Гибрид (bare-зеркало + worktree) | Закреплять DerivedData через -derivedDataPath на каждый worktree |
| Небольшое приложение, мало зависимостей, нужна воспроизводимость | Чистый клон на задачу | Следить за полосой LFS; кэшировать blobs на хосте с проверкой контрольных сумм |
| Подпись релиза с привязкой к железу | Выделенный хост + чистый клон | Никогда не делить базу worktree с недоверенными форками |
| Сборки PR из внешних форков | Эфемерный клон в уникальном пути | Отключать общие bare-зеркала через границы доверия |
Матрица решений B: размещение кэша и риск утечки
Режим checkout выбирает, где живут объекты Git; размещение кэша выбирает, что переживёт следующую задачу. Без согласования вы «клонируете чисто», но всё равно течёте состоянием компилятора через глобальные пути.
| Кэш | Безопасное умолчание на M4 | Симптом утечки |
|---|---|---|
| Swift Package Manager | На задачу SourcePackages под временем рабочего пространства |
Сдвиг версий между PR при глобальном кэше без хэша lockfile |
| CocoaPods / Bundler | Vendor внутри клона или кэш tarball с адресацией по содержимому | Нативные расширения с неверными флагами архитектуры |
| Xcode DerivedData | Всегда ограничивать путь ID задачи | Нестабильные UI-тесты после частичного индекса другой ветки |
Исполнимые дисковые бюджеты (стартовые точки)
- Потолок bare-зеркала: держать монорепо-зеркала ниже 120 ГБ на хостах 512 ГБ; подрезать аудируемыми скриптами, не вручную.
- Параллельные worktree: не более 4 на хост, если метрики IO не показывают запас устойчивой чтения.
- Scratch чистого клона: резервировать 2× самое большое ожидаемое рабочее дерево для
git clone --depth 1плюс пики LFS. - Аларм: пейджить, если свободный диск CI-тома ниже 15 % дольше 5 минут.
Заметка аудита: документируйте уровень доверия каждой группы раннеров. База worktree, которая когда-либо выкачивала PR из форка, не должна позже собирать подписанные релизные артефакты без задокументированного wipe.
Восемь шагов внедрения
- Классифицировать репозитории на доверенные внутренние, партнёрские и публичные форки.
- Измерить p95 checkout+compile по каждому уровню в обоих режимах за один спринт.
- Внедрить соглашения о путях, например
/ci/jobs/<id>/tree, которыми владеет только автоматизация. - Подключить post-job хуки, удаляющие worktree, DerivedData и кэши симулятора по ID задачи.
- Блокировать глобальные кэши, если нет ключа по хэшу содержимого + уровню доверия.
- Добавить метрики секунд checkout, мегабайт LFS и процента свободного диска по хосту.
- Game-day сценария полного диска дважды в квартал.
- Масштабировать железо, когда бюджет вынуждает рискованное совместное использование — NodeMac может добавить выделенные узлы Mac mini M4 по регионам без lead time колокации.
Частые вопросы
Когда git worktree безопасен на общих Mac mini M4 CI?
Когда пути worktree изолированы по задаче, хуки под контролем, субмодули зафиксированы, а очистка удаляет worktree и колокализованные кэши. Не делите bare-репозиторий с интерактивными сессиями разработчиков.
Почему чистые клоны всё ещё падают случайно?
Обычно глобальные кэши, сеть LFS или сканеры, трогающие вывод. Ограничьте кэши каталогом задачи и коррелируйте сбои с сетевыми графиками.
Сколько диска на параллельные worktree?
На каждый параллельный worktree — рабочее дерево и общее хранилище объектов, плюс DerivedData на задачу при сборке Xcode.