Скил using-git-worktrees — изолированные рабочие пространства без конфликта с харнессом
Как скил using-git-worktrees настраивает чистое изолированное рабочее пространство до начала работы над фичей — и почему он сначала проверяет наличие существующей изоляции.
Начинать реализацию прямо на рабочей ветке — надёжный способ получить неотслеживаемое состояние. Скил using-git-worktrees предоставляет структурированную процедуру для создания изолированного рабочего пространства до начала любой работы над фичей. Ключевой принцип: сначала обнаружить существующую изоляцию, использовать нативные инструменты до git-фолбека, и никогда не бороться с харнессом.
Шаг 0 — обнаружение до создания
Первое действие — всегда обнаружение, а не создание. Две шелл-команды определяют состояние: сравнение GIT_DIR и GIT_COMMON_DIR показывает, является ли текущая директория уже связанным worktree. Если они различаются — рабочее пространство уже изолировано, новый worktree не создаётся. Есть защита от сабмодулей: то же различие путей встречается внутри git-сабмодулей, поэтому скил проверяет git rev-parse --show-superproject-working-tree для различения двух случаев.
Если текущая директория не изолирована и пользователь ещё не обозначил предпочтение, скил запрашивает согласие перед продолжением. При отказе работа продолжается на месте.
Сначала нативные инструменты
Когда изоляция нужна, скил проверяет, предоставляет ли среда выполнения собственный механизм worktree — инструмент с именем EnterWorktree, команда /worktree или флаг --worktree. Если таковой есть — используется он. Нативные инструменты автоматически обрабатывают размещение директорий, создание ветки и очистку. Использование git worktree add при наличии нативного инструмента создаёт «фантомное» состояние, которое среда выполнения не может отследить.
Только при отсутствии нативного инструмента скил переходит к ручному созданию git worktree. Выбор директории следует приоритету: существующая локальная для проекта (.worktrees/ или worktrees/), затем глобальная (~/.worktrees/project/), затем объявленное предпочтение в инструкциях, затем по умолчанию .worktrees/ в корне проекта.
Проверка безопасности перед созданием
Для локальных директорий проекта скил запускает git check-ignore до создания чего-либо. Если директория ещё не проигнорирована, она сначала добавляется в .gitignore с коммитом этого изменения. Это предотвращает трекинг содержимого worktree и засорение git status. Глобальные директории в ~/.worktrees/ находятся вне любого репозитория и не требуют проверки игнорирования.
Настройка и базовая проверка
После создания рабочего пространства скил автоматически определяет менеджер пакетов или инструмент сборки проекта по файлу манифеста и выполняет соответствующую команду установки. Затем запускает канонический тест-прогон проекта. При падении тестов сообщает о сбоях и спрашивает, продолжать ли: работа с падающим базовым состоянием делает невозможным различение новых регрессий и уже существующих проблем.
Скил using-git-worktrees вызывается в начале работы над фичей и перед выполнением планов. Он органично связан со скилом systematic-debugging, когда базовые тесты неожиданно падают. Общий воркфлоу Datarim описан в посте что такое Datarim.